asterixdb git commit: Revert "[NO ISSUE][LOG] Include destination IP in thread name on push back"
Repository: asterixdb Updated Branches: refs/heads/master 129d401bf -> 8bf93fa70 Revert "[NO ISSUE][LOG] Include destination IP in thread name on push back" This reverts commit 2498d28f0584d6ab002625417622be429f5c8131. Change-Id: I221071a8a2851bde839e67d7f0380816c249366d Reviewed-on: https://asterix-gerrit.ics.uci.edu/2941 Sonar-Qube: Jenkins Tested-by: Jenkins Integration-Tests: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8bf93fa7 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8bf93fa7 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8bf93fa7 Branch: refs/heads/master Commit: 8bf93fa70aaf44deced9737ef71001366a35b242 Parents: 129d401 Author: abdullah alamoudi Authored: Thu Aug 30 13:57:44 2018 -0700 Committer: abdullah alamoudi Committed: Fri Aug 31 00:05:58 2018 -0700 -- .../hyracks/comm/channels/NetworkOutputChannel.java | 12 +--- .../net/protocols/muxdemux/ChannelControlBlock.java | 5 - .../hyracks/net/protocols/muxdemux/ChannelSet.java | 4 .../net/protocols/muxdemux/MultiplexedConnection.java | 5 - 4 files changed, 1 insertion(+), 25 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8bf93fa7/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java index 261e7c4..334fb5c 100644 --- a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java +++ b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java @@ -18,11 +18,9 @@ */ package org.apache.hyracks.comm.channels; -import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.util.ArrayDeque; import java.util.Deque; -import java.util.Objects; import org.apache.hyracks.api.comm.IBufferAcceptor; import org.apache.hyracks.api.comm.IFrameWriter; @@ -77,15 +75,7 @@ public class NetworkOutputChannel implements IFrameWriter { break; } try { -InetSocketAddress remoteAddress = ccb.getRemoteAddress(); -String nameBefore = Thread.currentThread().getName(); -try { -Thread.currentThread() -.setName(nameBefore + ":SendingTo(" + Objects.toString(remoteAddress) + ")"); -wait(); -} finally { -Thread.currentThread().setName(nameBefore); -} +wait(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw HyracksDataException.create(e); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8bf93fa7/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java index f7ef2aa..998acfb 100644 --- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java +++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java @@ -19,7 +19,6 @@ package org.apache.hyracks.net.protocols.muxdemux; import java.io.IOException; -import java.net.InetSocketAddress; import java.nio.channels.SocketChannel; import java.util.concurrent.atomic.AtomicBoolean; @@ -164,8 +163,4 @@ public class ChannelControlBlock implements IChannelControlBlock { + " remoteClose: " + remoteClose + " remoteCloseAck:" + remoteCloseAck + " readCredits: " + ri.getCredits() + " writeCredits: " + wi.getCredits() + "]"; } - -public InetSocketAddress getRemoteAddress() { -return cSet.getMultiplexedConnection().getRemoteAddress(); -} }
asterixdb git commit: [NO ISSUE][LOG] Include destination IP in thread name on push back
Repository: asterixdb Updated Branches: refs/heads/master b944080fc -> 2498d28f0 [NO ISSUE][LOG] Include destination IP in thread name on push back - user model changes: no - storage format changes: no - interface changes: no Details: - In certain cases, we noticed that threads of certain jobs are waiting on the network boundaries to send tuples. - In that case and in a big cluster, it is difficult to tell which node is pushing back. - To make this easy, we include the IP of the receiving node in the thread name. Change-Id: I81b48cb7a79de0a37f2171a1bd3b82141f89b49d Reviewed-on: https://asterix-gerrit.ics.uci.edu/2929 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/2498d28f Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/2498d28f Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/2498d28f Branch: refs/heads/master Commit: 2498d28f0584d6ab002625417622be429f5c8131 Parents: b944080 Author: Abdullah Alamoudi Authored: Mon Aug 27 13:42:21 2018 -0700 Committer: abdullah alamoudi Committed: Mon Aug 27 18:48:53 2018 -0700 -- .../hyracks/comm/channels/NetworkOutputChannel.java | 12 +++- .../net/protocols/muxdemux/ChannelControlBlock.java | 5 + .../hyracks/net/protocols/muxdemux/ChannelSet.java | 4 .../net/protocols/muxdemux/MultiplexedConnection.java | 5 + 4 files changed, 25 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2498d28f/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java index 334fb5c..261e7c4 100644 --- a/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java +++ b/hyracks-fullstack/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java @@ -18,9 +18,11 @@ */ package org.apache.hyracks.comm.channels; +import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.util.ArrayDeque; import java.util.Deque; +import java.util.Objects; import org.apache.hyracks.api.comm.IBufferAcceptor; import org.apache.hyracks.api.comm.IFrameWriter; @@ -75,7 +77,15 @@ public class NetworkOutputChannel implements IFrameWriter { break; } try { -wait(); +InetSocketAddress remoteAddress = ccb.getRemoteAddress(); +String nameBefore = Thread.currentThread().getName(); +try { +Thread.currentThread() +.setName(nameBefore + ":SendingTo(" + Objects.toString(remoteAddress) + ")"); +wait(); +} finally { +Thread.currentThread().setName(nameBefore); +} } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw HyracksDataException.create(e); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2498d28f/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java index 998acfb..f7ef2aa 100644 --- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java +++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java @@ -19,6 +19,7 @@ package org.apache.hyracks.net.protocols.muxdemux; import java.io.IOException; +import java.net.InetSocketAddress; import java.nio.channels.SocketChannel; import java.util.concurrent.atomic.AtomicBoolean; @@ -163,4 +164,8 @@ public class ChannelControlBlock implements IChannelControlBlock { + " remoteClose: " + remoteClose + " remoteCloseAck:" + remoteCloseAck + " readCredits: " + ri.getCredits() + " writeCredits: "
asterixdb git commit: [NO ISSUE][COMP] Fix TypeComputeUtils.getResultType
Repository: asterixdb Updated Branches: refs/heads/master 262a52025 -> b944080fc [NO ISSUE][COMP] Fix TypeComputeUtils.getResultType - user model changes: no - storage format changes: no - interface changes: no Details: - Fix TypeComputeUtils.getResultType to either return unknowable or missable type. Change-Id: Id881f2a5ad8134a3e86b2b08ce1acdc53c4948a2 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2928 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Dmitry Lychagin Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/b944080f Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/b944080f Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/b944080f Branch: refs/heads/master Commit: b944080fc286b90a37fcc2c63e93caa590b65007 Parents: 262a520 Author: Abdullah Alamoudi Authored: Sun Aug 26 13:27:28 2018 -0700 Committer: abdullah alamoudi Committed: Mon Aug 27 11:01:39 2018 -0700 -- .../org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b944080f/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java -- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java index 806235c..448ab4c 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java @@ -169,8 +169,7 @@ public class TypeComputeUtils { IAType resultType = type; if ((category & NULLABLE) != 0 || (category & NULL) != 0) { resultType = AUnionType.createUnknownableType(resultType); -} -if ((category & MISSABLE) != 0 || (category & MISSING) != 0) { +} else if ((category & MISSABLE) != 0 || (category & MISSING) != 0) { resultType = AUnionType.createMissableType(resultType); } return resultType;
asterixdb git commit: [NO ISSUE][RT] Improve debuggability of runtime functions
Repository: asterixdb Updated Branches: refs/heads/master 90114dfa3 -> 262a52025 [NO ISSUE][RT] Improve debuggability of runtime functions - user model changes: no - storage format changes: no - interface changes: no Details: - This change introduce util methods to facilitate debugging functions runtime. Runtime functions read and write values from and into byte arrays. - To allow easier inspection of such values, we provide a method that takes a pointable and produces an adm node representing the value pointed to by the pointable. Change-Id: I33257507e9bdd3be80355218e4bafecd1c71c650 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2926 Reviewed-by: Till Westmann Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/262a5202 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/262a5202 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/262a5202 Branch: refs/heads/master Commit: 262a5202523de9b220f72a812f989256a83b185b Parents: 90114df Author: Abdullah Alamoudi Authored: Fri Aug 24 14:44:31 2018 -0700 Committer: Till Westmann Committed: Fri Aug 24 16:11:50 2018 -0700 -- .../external/parser/jackson/ObjectPool.java | 5 +++ .../SerializerDeserializerProvider.java | 2 +- .../pointables/AbstractVisitablePointable.java | 6 +++ .../om/pointables/PointableAllocator.java | 2 +- .../apache/asterix/om/utils/AdmNodeUtils.java | 40 5 files changed, 53 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/262a5202/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/jackson/ObjectPool.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/jackson/ObjectPool.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/jackson/ObjectPool.java index 5ccd9e9..8945e71 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/jackson/ObjectPool.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/jackson/ObjectPool.java @@ -59,4 +59,9 @@ public class ObjectPool { recycledObjects.add(object); } } + +@Override +public String toString() { +return recycledObjects.toString(); +} } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/262a5202/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java -- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java index 0cba8b6..356b84c 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/SerializerDeserializerProvider.java @@ -171,7 +171,7 @@ public class SerializerDeserializerProvider implements ISerializerDeserializerPr } @SuppressWarnings("rawtypes") -private ISerializerDeserializer addTag(final ISerializerDeserializer nonTaggedSerde) { +public static ISerializerDeserializer addTag(final ISerializerDeserializer nonTaggedSerde) { return new ISerializerDeserializer() { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/262a5202/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/AbstractVisitablePointable.java -- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/AbstractVisitablePointable.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/AbstractVisitablePointable.java index 2ff9357..e9aa99c 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/AbstractVisitablePointable.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/AbstractVisitablePointable.java @@ -59,4 +59,10 @@ public abstract class AbstractVisitablePointable implements IVisitablePointable set(ivf.getByteArray(), ivf.getStartOffset(), ivf.getLength()); } +@Override +public String toString() { +return "{ \"class\" : \"" + getClass().getSimpleName() + "\", \"data\" : " ++ (data == null ? "null" : ("\"" + System.identityHashCode(data) + ":" + data.length + "\"")) +
asterixdb-bad git commit: Fix tuple translators with extension datasets
Repository: asterixdb-bad Updated Branches: refs/heads/master ad1c6015e -> d0ccc577d Fix tuple translators with extension datasets Change-Id: I39f6707392085416c01e834ac85767f79a64f9d6 Project: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/commit/d0ccc577 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/tree/d0ccc577 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/diff/d0ccc577 Branch: refs/heads/master Commit: d0ccc577db92bdb86ff42f8889fc826ef4f2f8ac Parents: ad1c601 Author: Abdullah Alamoudi Authored: Wed Aug 15 08:50:05 2018 -0700 Committer: Abdullah Alamoudi Committed: Wed Aug 15 08:50:05 2018 -0700 -- .../bad/metadata/BADMetadataIndexes.java| 26 ++-- 1 file changed, 13 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb-bad/blob/d0ccc577/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/BADMetadataIndexes.java -- diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/BADMetadataIndexes.java b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/BADMetadataIndexes.java index b33dcad..fa35fd5 100644 --- a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/BADMetadataIndexes.java +++ b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/BADMetadataIndexes.java @@ -32,17 +32,17 @@ public class BADMetadataIndexes { public static final ExtensionMetadataDatasetId BAD_CHANNEL_INDEX_ID = new ExtensionMetadataDatasetId( BADMetadataExtension.BAD_METADATA_EXTENSION_ID, BADConstants.CHANNEL_EXTENSION_NAME); -public static final MetadataIndexImmutableProperties PROPERTIES_CHANNEL = new MetadataIndexImmutableProperties( -BADConstants.CHANNEL_EXTENSION_NAME, - MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID, - MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID); +public static final MetadataIndexImmutableProperties PROPERTIES_CHANNEL = +new MetadataIndexImmutableProperties(BADConstants.CHANNEL_EXTENSION_NAME, + MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID, + MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID); -public static final ExtensionMetadataDatasetId BAD_BROKER_INDEX_ID = new ExtensionMetadataDatasetId( -BADMetadataExtension.BAD_METADATA_EXTENSION_ID, BADConstants.BROKER_KEYWORD); -public static final MetadataIndexImmutableProperties PROPERTIES_BROKER = new MetadataIndexImmutableProperties( -BADConstants.BROKER_KEYWORD, - MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID + 1, - MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID + 1); +public static final ExtensionMetadataDatasetId BAD_BROKER_INDEX_ID = +new ExtensionMetadataDatasetId(BADMetadataExtension.BAD_METADATA_EXTENSION_ID, BADConstants.BROKER_KEYWORD); +public static final MetadataIndexImmutableProperties PROPERTIES_BROKER = +new MetadataIndexImmutableProperties(BADConstants.BROKER_KEYWORD, + MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID + 1, + MetadataIndexImmutableProperties.FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID + 1); public static final ExtensionMetadataDatasetId BAD_PROCEDURE_INDEX_ID = new ExtensionMetadataDatasetId( BADMetadataExtension.BAD_METADATA_EXTENSION_ID, BADConstants.PROCEDURE_KEYWORD); @@ -61,7 +61,7 @@ public class BADMetadataIndexes { Arrays.asList(Arrays.asList(MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME), Arrays.asList(BADConstants.ChannelName)), 0, BADMetadataRecordTypes.CHANNEL_RECORDTYPE, true, new int[] { 0, 1 }, BAD_CHANNEL_INDEX_ID, -new ChannelTupleTranslator(true)); +() -> new ChannelTupleTranslator(true)); @SuppressWarnings({ "rawtypes", "unchecked" }) public static final ExtensionMetadataDataset BROKER_DATASET = new ExtensionMetadataDataset(PROPERTIES_BROKER, @@ -69,7 +69,7 @@ public class BADMetadataIndexes { Arrays.asList(Arrays.asList(MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME), Arrays.asList(BADConstants.BrokerName)), 0, BADMetadataRecordTypes.BROKER_RECORDTYPE, true, new int[] { 0, 1 }, BAD_BROKER_INDEX_ID, -new BrokerTupleTranslator(true)); +() -> new BrokerTupleTranslator(true)); @SuppressWarnings({ "rawtypes", "unchecked" }) public static final
asterixdb git commit: [NO ISSUE][TXN] Fix extension datasets tuple translators
Repository: asterixdb Updated Branches: refs/heads/master 4af131ada -> 51aef3c22 [NO ISSUE][TXN] Fix extension datasets tuple translators Change-Id: Ifb8a8342d0f00468e1561d91eb802c52e66b149d Reviewed-on: https://asterix-gerrit.ics.uci.edu/2908 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/51aef3c2 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/51aef3c2 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/51aef3c2 Branch: refs/heads/master Commit: 51aef3c2283cee81ae4e57295bddb7abf555cb0c Parents: 4af131a Author: Abdullah Alamoudi Authored: Wed Aug 15 08:28:26 2018 -0700 Committer: abdullah alamoudi Committed: Wed Aug 15 12:55:32 2018 -0700 -- .../metadata/api/ExtensionMetadataDataset.java | 8 +++--- .../IMetadataEntityTupleTranslatorFactory.java | 29 2 files changed, 33 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/51aef3c2/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ExtensionMetadataDataset.java -- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ExtensionMetadataDataset.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ExtensionMetadataDataset.java index d25f488..ebb9cac 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ExtensionMetadataDataset.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ExtensionMetadataDataset.java @@ -29,16 +29,16 @@ public class ExtensionMetadataDataset extends MetadataIndex { private static final long serialVersionUID = 1L; private final ExtensionMetadataDatasetId indexId; -private final transient IMetadataEntityTupleTranslator tupleTranslator; +private final transient IMetadataEntityTupleTranslatorFactory tupleTranslatorFactory; public ExtensionMetadataDataset(MetadataIndexImmutableProperties indexProperties, int numFields, IAType[] keyTypes, List> keyNames, int numSecondaryIndexKeys, ARecordType payloadType, boolean isPrimaryIndex, int[] primaryKeyIndexes, ExtensionMetadataDatasetId indexId, -IMetadataEntityTupleTranslator tupleTranslator) { +IMetadataEntityTupleTranslatorFactory tupleTranslatorFactory) { super(indexProperties, numFields, keyTypes, keyNames, numSecondaryIndexKeys, payloadType, isPrimaryIndex, primaryKeyIndexes); this.indexId = indexId; -this.tupleTranslator = tupleTranslator; +this.tupleTranslatorFactory = tupleTranslatorFactory; } public ExtensionMetadataDatasetId getId() { @@ -46,6 +46,6 @@ public class ExtensionMetadataDataset extends MetadataIndex { } public IMetadataEntityTupleTranslator getTupleTranslator() { -return tupleTranslator; +return tupleTranslatorFactory.createTupleTranslator(); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/51aef3c2/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslatorFactory.java -- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslatorFactory.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslatorFactory.java new file mode 100644 index 000..e472383 --- /dev/null +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslatorFactory.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.metadata.api; + +import java.io.Serializable; + +public interface
asterixdb git commit: [NO ISSUE][RT] Follow IFrameWriter protocol in AbstractOneInputPushRuntime
Repository: asterixdb Updated Branches: refs/heads/master 9c7088ddb -> b2a7381a1 [NO ISSUE][RT] Follow IFrameWriter protocol in AbstractOneInputPushRuntime - user model changes: no - storage format changes: no - interface changes: no Details: - Many implementations of AbstractOneInputPushRuntime didn't follow the IFrameWriter protocol causing many unexpected runtime exceptions. - This change ensures that all of the subclasses implement the protocol correctly. Change-Id: I5133007f298366f58b53acc9f48bc553724dd7b5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2884 Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/b2a7381a Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/b2a7381a Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/b2a7381a Branch: refs/heads/master Commit: b2a7381a1dd644141affde764bc31beaf7bb482d Parents: 9c7088d Author: Abdullah Alamoudi Authored: Sun Aug 12 21:42:26 2018 -0700 Committer: abdullah alamoudi Committed: Tue Aug 14 09:43:58 2018 -0700 -- .../management/runtime/CommitRuntime.java | 27 +--- .../aggreg/AggregateRuntimeFactory.java | 12 + ...actOneInputOneOutputOneFramePushRuntime.java | 22 +++- .../base/AbstractOneInputPushRuntime.java | 19 +- .../base/AbstractOneInputSourcePushRuntime.java | 10 .../operators/meta/SubplanRuntimeFactory.java | 3 ++- .../sort/InMemorySortRuntimeFactory.java| 24 - .../operators/std/AssignRuntimeFactory.java | 18 + .../std/EmptyTupleSourceRuntimeFactory.java | 11 +++- .../std/NestedTupleSourceRuntimeFactory.java| 5 .../std/RunningAggregateRuntimeFactory.java | 18 + .../std/StreamLimitRuntimeFactory.java | 2 +- .../std/StreamProjectRuntimeFactory.java| 2 +- .../std/StreamSelectRuntimeFactory.java | 12 + .../std/StringStreamingRuntimeFactory.java | 5 +++- .../operators/std/UnnestRuntimeFactory.java | 2 +- 16 files changed, 63 insertions(+), 129 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b2a7381a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntime.java -- diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntime.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntime.java index 74ba139..2692cc7 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntime.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntime.java @@ -89,7 +89,7 @@ public class CommitRuntime extends AbstractOneInputOneOutputOneFramePushRuntime return; } initAccessAppend(ctx); -writer.open(); +super.open(); } catch (ACIDException e) { throw HyracksDataException.create(e); } @@ -142,31 +142,6 @@ public class CommitRuntime extends AbstractOneInputOneOutputOneFramePushRuntime } @Override -public void fail() throws HyracksDataException { -failed = true; -if (isSink) { -return; -} -writer.fail(); -} - -@Override -public void close() throws HyracksDataException { -if (isSink) { -return; -} -try { -flushIfNotFailed(); -} catch (Exception e) { -writer.fail(); -throw e; -} finally { -writer.close(); -} -appender.reset(frame, true); -} - -@Override public void setInputRecordDescriptor(int index, RecordDescriptor recordDescriptor) { this.inputRecordDesc = recordDescriptor; this.tAccess = new FrameTupleAccessor(inputRecordDesc); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b2a7381a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/AggregateRuntimeFactory.java -- diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/AggregateRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/AggregateRuntimeFactory.java index e99b61b..1f9cb91
asterixdb git commit: [ASTERIXDB-2065][ING] Make stop timeout configurable
Repository: asterixdb Updated Branches: refs/heads/master aeb6e3bc2 -> 8b3a2e2ce [ASTERIXDB-2065][ING] Make stop timeout configurable - user model changes: no - storage format changes: no - interface changes: no Details: - Make timeout of a graceful stop of an active job configurable. Change-Id: Id8d0c205a6959967dbce2b7223061ffa2f26059c Reviewed-on: https://asterix-gerrit.ics.uci.edu/2845 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8b3a2e2c Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8b3a2e2c Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8b3a2e2c Branch: refs/heads/master Commit: 8b3a2e2ce5fa3fd26e9770a0ba144b1b4b537f62 Parents: aeb6e3b Author: Abdullah Alamoudi Authored: Wed Aug 8 16:52:53 2018 -0700 Committer: abdullah alamoudi Committed: Wed Aug 8 18:37:54 2018 -0700 -- .../asterix/app/active/ActiveEntityEventsListener.java | 7 ++- .../asterix/test/active/ActiveEventsListenerTest.java | 4 +++- .../apache/asterix/test/active/TestEventsListener.java | 5 - .../api/cluster_state_1/cluster_state_1.1.regexadm | 2 ++ .../cluster_state_1_full.1.regexadm| 2 ++ .../cluster_state_1_less.1.regexadm| 2 ++ .../apache/asterix/common/config/ActiveProperties.java | 13 - 7 files changed, 27 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8b3a2e2c/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 22c9b5d..39a8402 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -74,10 +74,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl private static final EnumSet TRANSITION_STATES = EnumSet.of(ActivityState.RESUMING, ActivityState.STARTING, ActivityState.STOPPING, ActivityState.RECOVERING, ActivityState.CANCELLING); private static final String DEFAULT_ACTIVE_STATS = "{\"Stats\":\"N/A\"}"; -// TODO: Make configurable https://issues.apache.org/jira/browse/ASTERIXDB-2065 -protected static final long STOP_MESSAGE_TIMEOUT = 5L; -protected static final long SUSPEND_MESSAGE_TIMEOUT = 10L; -protected static final TimeUnit TIMEOUT_UNIT = TimeUnit.MINUTES; +protected static final TimeUnit TIMEOUT_UNIT = TimeUnit.SECONDS; protected final IClusterStateManager clusterStateManager; protected final ActiveNotificationHandler handler; protected final List subscribers = new ArrayList<>(); @@ -521,7 +518,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl } else if (state == ActivityState.RUNNING) { setState(ActivityState.STOPPING); try { -doStop(metadataProvider, STOP_MESSAGE_TIMEOUT, TIMEOUT_UNIT); +doStop(metadataProvider, appCtx.getActiveProperties().getActiveStopTimeout(), TIMEOUT_UNIT); } catch (Exception e) { setState(ActivityState.STOPPED); LOGGER.log(Level.ERROR, "Failed to stop the entity " + entityId, e); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8b3a2e2c/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java index 6c95958..64520a4 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java @@ -37,6 +37,7 @@ import org.apache.asterix.app.active.ActiveNotificationHandler; import org.apache.asterix.common.api.IClusterManagementWork.ClusterState; import org.apache.asterix.common.api.IMetadataLockManager; import org.apache.asterix.common.cluster.IClusterStateManager; +import org.apache.asterix.common.config.ActiveProperties; import org.apache.asterix.common.context.IStorageComponentProvider; import
asterixdb git commit: [NO ISSUE][ING] Set JobId in thread waiting for job to complete
Repository: asterixdb Updated Branches: refs/heads/master 53f4f6f48 -> 1f821f2b2 [NO ISSUE][ING] Set JobId in thread waiting for job to complete - user model changes: no - storage format changes: no - interface changes: no Details: - When stopping an active job, set the job Id in the thread to enable debugging if the job gets stuck. Change-Id: Ic19d11f150aa404522133d4d7227c758dbf0de6a Reviewed-on: https://asterix-gerrit.ics.uci.edu/2850 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/1f821f2b Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/1f821f2b Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/1f821f2b Branch: refs/heads/master Commit: 1f821f2b25cc529dc55e566f4ca5bf1cafbf0ce9 Parents: 53f4f6f Author: Abdullah Alamoudi Authored: Mon Aug 6 16:29:04 2018 -0700 Committer: abdullah alamoudi Committed: Tue Aug 7 11:56:02 2018 -0700 -- .../src/main/java/org/apache/asterix/active/ActiveManager.java | 2 -- .../apache/asterix/api/http/server/NCQueryServiceServlet.java| 3 ++- .../apache/asterix/app/active/ActiveEntityEventsListener.java| 4 3 files changed, 6 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1f821f2b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java index 6373d6c..4adffda 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java @@ -172,8 +172,6 @@ public class ActiveManager { executor.execute(() -> { try { stopIfRunning(runtime, content.getTimeout(), content.getUnit()); -} catch (Exception e) { -LOGGER.warn("Failed to stop runtime: {}", runtimeId, e); } catch (Throwable th) { LOGGER.warn("Failed to stop runtime: {}", runtimeId, th); ExitUtil.halt(ExitUtil.EC_UNCAUGHT_THROWABLE); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1f821f2b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java index 77b8647..362f924 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java @@ -45,8 +45,8 @@ import org.apache.asterix.translator.ResultProperties; import org.apache.asterix.translator.SessionOutput; import org.apache.commons.lang3.tuple.Triple; import org.apache.hyracks.api.application.INCServiceContext; -import org.apache.hyracks.api.result.ResultSetId; import org.apache.hyracks.api.job.JobId; +import org.apache.hyracks.api.result.ResultSetId; import org.apache.hyracks.http.api.IChannelClosedHandler; import org.apache.hyracks.http.api.IServletRequest; import org.apache.hyracks.http.server.HttpServer; @@ -144,6 +144,7 @@ public class NCQueryServiceServlet extends QueryServiceServlet { CancelQueryRequest cancelQueryMessage = new CancelQueryRequest(nodeId, cancelQueryFuture.getFutureId(), clientContextID); // TODO(mblow): multicc -- need to send cancellation to the correct cc +LOGGER.info("Cancelling query due to {}", exception.getClass().getSimpleName()); messageBroker.sendMessageToPrimaryCC(cancelQueryMessage); if (wait) { cancelQueryFuture.get(ExecuteStatementRequestMessage.DEFAULT_QUERY_CANCELLATION_WAIT_MILLIS, http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1f821f2b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index b5432c5..22c9b5d 100644 ---
asterixdb git commit: [NO ISSUE][STO] Notify of completion of IO request in finally
Repository: asterixdb Updated Branches: refs/heads/master cf4f7f7be -> 700bbddf5 [NO ISSUE][STO] Notify of completion of IO request in finally - user model changes: no - storage format changes: no - interface changes: no Details: - Notify completion of a request in a finally clause to ensure waiting thread is always notified. Change-Id: I8b3003b47b6b181856faf82aca6e828ee014527c Reviewed-on: https://asterix-gerrit.ics.uci.edu/2839 Sonar-Qube: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/700bbddf Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/700bbddf Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/700bbddf Branch: refs/heads/master Commit: 700bbddf58a5290bbfe6b916a7ab33361544532c Parents: cf4f7f7 Author: Abdullah Alamoudi Authored: Mon Aug 6 13:47:31 2018 -0700 Committer: abdullah alamoudi Committed: Tue Aug 7 10:12:13 2018 -0700 -- .../org/apache/hyracks/control/nc/io/IoRequest.java | 10 ++ .../hyracks/storage/am/lsm/common/impls/LSMHarness.java | 12 +++- 2 files changed, 9 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/700bbddf/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IoRequest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IoRequest.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IoRequest.java index 8c81d41..93e38f5 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IoRequest.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IoRequest.java @@ -44,7 +44,7 @@ public class IoRequest implements IAsyncRequest, InterruptibleAction { private long offset; private ByteBuffer data; private ByteBuffer[] dataArray; -private HyracksDataException failure; +private Throwable failure; private int read; private int write; private long writes; @@ -133,15 +133,17 @@ public class IoRequest implements IAsyncRequest, InterruptibleAction { state = State.OPERATION_SUCCEEDED; } catch (Throwable th) { // NOSONAR: This method must never throw anything state = State.OPERATION_FAILED; -failure = HyracksDataException.create(th); +failure = th; +} finally { +notifyAll(); } -notifyAll(); } public State getState() { return state; } +@SuppressWarnings("squid:S899") // Offer failing means we're over capacity and this should be garbage collected void recycle() { reset(); freeRequests.offer(this); @@ -165,6 +167,6 @@ public class IoRequest implements IAsyncRequest, InterruptibleAction { } public HyracksDataException getFailure() { -return failure; +return HyracksDataException.create(failure); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/700bbddf/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java index 3eea0a9..8e2ff01 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java @@ -142,9 +142,7 @@ public class LSMHarness implements ILSMHarness { } entranceSuccessful = numEntered == components.size(); } catch (Throwable e) { // NOSONAR: Log and re-throw -if (LOGGER.isErrorEnabled()) { -LOGGER.log(Level.ERROR, opType.name() + " failed to enter components on " + lsmIndex, e); -} +LOGGER.warn("{} failed to enter components on {}", opType.name(), lsmIndex, e); throw e; } finally { if (!entranceSuccessful) { @@ -201,9 +199,7 @@ public class LSMHarness implements ILSMHarness {
asterixdb git commit: [NO ISSUE][STO] Skip flush recovery of empty resources
Repository: asterixdb Updated Branches: refs/heads/master 6cd3127c4 -> 8026b2dc9 [NO ISSUE][STO] Skip flush recovery of empty resources - user model changes: no - storage format changes: no - interface changes: no Details: - Before this change, recovery would throw a NullPointerException on recovery of a flush operation on a component without update logs. - Since this can happen, we simply check for the case and skip the flush. Change-Id: Ib01d7513f43830109632760860d34ca3dcddeaee Reviewed-on: https://asterix-gerrit.ics.uci.edu/2844 Tested-by: Jenkins Contrib: Jenkins Reviewed-by: abdullah alamoudi Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8026b2dc Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8026b2dc Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8026b2dc Branch: refs/heads/master Commit: 8026b2dc95b0b48949b192409be97ec40ac3fa2d Parents: 6cd3127 Author: Abdullah Alamoudi Authored: Fri Aug 3 15:46:20 2018 -0700 Committer: abdullah alamoudi Committed: Fri Aug 3 23:33:48 2018 -0700 -- .../apache/asterix/app/nc/RecoveryManager.java | 30 1 file changed, 18 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8026b2dc/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java index 5e8a5e8..adf9960 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java @@ -296,7 +296,7 @@ public class RecoveryManager implements IRecoveryManager, ILifeCycleComponent { ((INcApplicationContext) (serviceCtx.getApplicationContext())).getIndexCheckpointManagerProvider(); Map resourcesMap = localResourceRepository.loadAndGetAllResources(); -Map resourceId2MaxLSNMap = new HashMap<>(); +final Map resourceId2MaxLSNMap = new HashMap<>(); TxnEntityId tempKeyTxnEntityId = new TxnEntityId(-1, -1, -1, null, -1, false); ILogRecord logRecord = null; @@ -399,19 +399,25 @@ public class RecoveryManager implements IRecoveryManager, ILifeCycleComponent { // we only need to flush open indexes here (opened by previous update records) // if an index has no ongoing updates, then it's memory component must be empty // and there is nothing to flush -for (IndexInfo iInfo : dsInfo.getIndexes().values()) { +for (final IndexInfo iInfo : dsInfo.getIndexes().values()) { if (iInfo.isOpen() && iInfo.getPartition() == partition) { -maxDiskLastLsn = resourceId2MaxLSNMap.get(iInfo.getResourceId()); -index = iInfo.getIndex(); -if (logRecord.getLSN() > maxDiskLastLsn -&& !index.isCurrentMutableComponentEmpty()) { -// schedule flush -redoFlush(index, logRecord); -redoCount++; +Long maxLsnBeforeFlush = resourceId2MaxLSNMap.get(iInfo.getResourceId()); +if (maxLsnBeforeFlush != null) { +// If there was at least one update to the resource. +// IMPORTANT: Don't remove the check above +// This check is to support indexes without transaction logs +maxDiskLastLsn = maxLsnBeforeFlush; +index = iInfo.getIndex(); +if (logRecord.getLSN() > maxDiskLastLsn +&& !index.isCurrentMutableComponentEmpty()) { +// schedule flush +redoFlush(index, logRecord); +redoCount++; +} else { +// TODO: update checkpoint file? +} } else { -
asterixdb git commit: [NO ISSUE][ING] Increase timeout for stopping ingestion
Repository: asterixdb Updated Branches: refs/heads/master a7094732b -> 5de12d01c [NO ISSUE][ING] Increase timeout for stopping ingestion - user model changes: no - storage format changes: no - interface changes: no Details: - To allow systems under high load enough time to push accumulated data to storage, we increased the default timeout for stopping active entities to 5 minutes. Change-Id: I3e590b1c7fdc0eb9be34d82b4b2ac1b2a2eef515 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2841 Reviewed-by: Murtadha Hubail Sonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/5de12d01 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/5de12d01 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/5de12d01 Branch: refs/heads/master Commit: 5de12d01c019e609992845e6fc5a2d0a9b2cb9e9 Parents: a709473 Author: Abdullah Alamoudi Authored: Thu Aug 2 17:05:43 2018 -0700 Committer: abdullah alamoudi Committed: Thu Aug 2 20:13:45 2018 -0700 -- .../apache/asterix/app/active/ActiveEntityEventsListener.java| 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5de12d01/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 345080c..b5432c5 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -75,8 +75,8 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl ActivityState.STARTING, ActivityState.STOPPING, ActivityState.RECOVERING, ActivityState.CANCELLING); private static final String DEFAULT_ACTIVE_STATS = "{\"Stats\":\"N/A\"}"; // TODO: Make configurable https://issues.apache.org/jira/browse/ASTERIXDB-2065 -protected static final long STOP_MESSAGE_TIMEOUT = 2L; -protected static final long SUSPEND_MESSAGE_TIMEOUT = 5L; +protected static final long STOP_MESSAGE_TIMEOUT = 5L; +protected static final long SUSPEND_MESSAGE_TIMEOUT = 10L; protected static final TimeUnit TIMEOUT_UNIT = TimeUnit.MINUTES; protected final IClusterStateManager clusterStateManager; protected final ActiveNotificationHandler handler;
asterixdb git commit: [NO ISSUE] Set JobId in thread name waiting for job completion
Repository: asterixdb Updated Branches: refs/heads/master 39ee11732 -> ad13fc646 [NO ISSUE] Set JobId in thread name waiting for job completion - user model changes: no - storage format changes: no - interface changes: no Details: - To allow correlation between running tasks and requests waiting for job completion, we set the job id in the request thread and we also add it to the name of the parallel threads in Super Activity Operator Node Pushable. Change-Id: I003432da0109c253e976f130e91f1f1f5ff628f3 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2837 Reviewed-by: Murtadha Hubail Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/ad13fc64 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/ad13fc64 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/ad13fc64 Branch: refs/heads/master Commit: ad13fc6463b5adae637c80157aa3df1cc26c3a45 Parents: 39ee117 Author: Abdullah Alamoudi Authored: Thu Aug 2 11:28:40 2018 -0700 Committer: abdullah alamoudi Committed: Thu Aug 2 13:52:55 2018 -0700 -- .../main/java/org/apache/asterix/common/utils/JobUtils.java | 8 +++- .../rewriter/runtime/SuperActivityOperatorNodePushable.java | 4 .../hyracks/control/cc/work/WaitForJobCompletionWork.java| 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ad13fc64/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/JobUtils.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/JobUtils.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/JobUtils.java index cacbfbc..232c8dd 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/JobUtils.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/JobUtils.java @@ -43,7 +43,13 @@ public class JobUtils { spec.setMaxReattempts(0); final JobId jobId = hcc.startJob(spec, jobFlags); if (waitForCompletion) { -hcc.waitForCompletion(jobId); +String nameBefore = Thread.currentThread().getName(); +try { +Thread.currentThread().setName(nameBefore + " : WaitForCompletionForJobId: " + jobId); +hcc.waitForCompletion(jobId); +} finally { +Thread.currentThread().setName(nameBefore); +} } return jobId; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ad13fc64/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/rewriter/runtime/SuperActivityOperatorNodePushable.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/rewriter/runtime/SuperActivityOperatorNodePushable.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/rewriter/runtime/SuperActivityOperatorNodePushable.java index d499554..46a1dec 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/rewriter/runtime/SuperActivityOperatorNodePushable.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/rewriter/runtime/SuperActivityOperatorNodePushable.java @@ -205,6 +205,10 @@ public class SuperActivityOperatorNodePushable implements IOperatorNodePushable tasks.add(ctx.getExecutorService().submit(() -> { startSemaphore.release(); try { +Thread.currentThread() +.setName(Thread.currentThread().getName() + ":" + ctx.getJobletContext().getJobId() ++ ":" + ctx.getTaskAttemptId() + ":" ++ SuperActivityOperatorNodePushable.class.getSimpleName()); action.run(op); } catch (Throwable th) { // NOSONAR: Must catch all causes of failure failures.offer(th); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ad13fc64/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/WaitForJobCompletionWork.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/WaitForJobCompletionWork.java
asterixdb git commit: [NO ISSUE] Improve logging for Http server
Repository: asterixdb Updated Branches: refs/heads/master 93c8b4cdf -> bb8856004 [NO ISSUE] Improve logging for Http server - user model changes: no - storage format changes: no - interface changes: no Details: - Reduce logging level for failures in HttpServerHandler. - Log as an error failures during active jobs. Change-Id: I7474a93e869df1cbf5dbb00d16acbe2d4bfaa6e0 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2834 Reviewed-by: Murtadha Hubail Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/bb885600 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/bb885600 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/bb885600 Branch: refs/heads/master Commit: bb885600431bd1c08bf8483ae830356856c62c03 Parents: 93c8b4c Author: Abdullah Alamoudi Authored: Wed Aug 1 18:47:35 2018 -0700 Committer: abdullah alamoudi Committed: Wed Aug 1 21:12:31 2018 -0700 -- .../asterix/app/active/ActiveEntityEventsListener.java | 2 ++ .../org/apache/hyracks/http/server/HttpServerHandler.java| 8 2 files changed, 6 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bb885600/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index be43a4e..345080c 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -191,6 +191,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl @SuppressWarnings("unchecked") protected void finish(ActiveEvent event) throws HyracksDataException { LOGGER.log(level, "the job " + jobId + " finished"); +JobId lastJobId = jobId; if (numRegistered != numDeRegistered) { LOGGER.log(Level.WARN, "the job {} finished with reported runtime registrations = {} and deregistrations = {}", jobId, @@ -204,6 +205,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl if (!jobSuccessfullyTerminated(jobStatus)) { jobFailure = exceptions.isEmpty() ? new RuntimeDataException(ErrorCode.UNREPORTED_TASK_FAILURE_EXCEPTION) : exceptions.get(0); +LOGGER.error("Active Job {} failed", lastJobId, jobFailure); setState((state == ActivityState.STOPPING || state == ActivityState.CANCELLING) ? ActivityState.STOPPED : ActivityState.TEMPORARILY_FAILED); if (prevState == ActivityState.RUNNING) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bb885600/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java index 7b3d18a..baa664a 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java @@ -91,7 +91,7 @@ public class HttpServerHandler extends SimpleChannelInboun submit(ctx, servlet, request); } } catch (Exception e) { -LOGGER.log(Level.ERROR, "Failure Submitting HTTP Request", e); +LOGGER.log(Level.WARN, "Failure Submitting HTTP Request", e); respond(ctx, request.protocolVersion(), new HttpResponseStatus(500, e.getMessage())); } } @@ -125,15 +125,15 @@ public class HttpServerHandler extends SimpleChannelInboun } protected void handleServletNotFound(ChannelHandlerContext ctx, FullHttpRequest request) { -if (LOGGER.isWarnEnabled()) { -LOGGER.warn("No servlet for " + request.uri()); +if (LOGGER.isDebugEnabled()) { +LOGGER.debug("No servlet for " + request.uri()); } respond(ctx, request.protocolVersion(), HttpResponseStatus.NOT_FOUND); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { -
asterixdb git commit: [NO ISSUE] Set logging level to WARN in MaterializingPipelinedPartition
Repository: asterixdb Updated Branches: refs/heads/master 1027474db -> 708f3c37e [NO ISSUE] Set logging level to WARN in MaterializingPipelinedPartition - user model changes: no - storage format changes: no - interface changes: no Details: Failures in MaterializingPipelinedPartition can be due to many reasons such as a job cancellation. WARN log level seems to be adequate for such failures keeping ERROR for more critical failures. Change-Id: I45f475afae114dc71d2d89d9deaab7f3b3c5a0b8 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2832 Sonar-Qube: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/708f3c37 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/708f3c37 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/708f3c37 Branch: refs/heads/master Commit: 708f3c37e27bd41226c2e768ff640134b6d4bcac Parents: 1027474 Author: Abdullah Alamoudi Authored: Wed Aug 1 11:35:28 2018 -0700 Committer: abdullah alamoudi Committed: Wed Aug 1 14:15:35 2018 -0700 -- .../control/nc/partitions/MaterializingPipelinedPartition.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/708f3c37/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java index 29c2ff2..37f33a9 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java @@ -89,7 +89,7 @@ public class MaterializingPipelinedPartition implements IFrameWriter, IPartition Thread thread = Thread.currentThread(); setDataConsumerThread(thread); // Sets the data consumer thread to the current thread. try { - thread.setName(MaterializingPipelinedPartition.class.getName() + pid); + thread.setName(MaterializingPipelinedPartition.class.getName() + " " + pid); FileReference fRefCopy; synchronized (MaterializingPipelinedPartition.this) { while (fRef == null && !eos && !failed) { @@ -164,7 +164,7 @@ public class MaterializingPipelinedPartition implements IFrameWriter, IPartition } } } catch (Exception e) { -LOGGER.log(Level.ERROR, e.getMessage(), e); +LOGGER.warn("Failure writing to a frame", e); } finally { setDataConsumerThread(null); // Sets back the data consumer thread to null. }
asterixdb git commit: [NO ISSUE][TEST] Store results even if there is no expected results
Repository: asterixdb Updated Branches: refs/heads/master a91abc2e5 -> 317628afe [NO ISSUE][TEST] Store results even if there is no expected results Change-Id: I659a089ce640b93141828155d144bb1170b072ff Reviewed-on: https://asterix-gerrit.ics.uci.edu/2814 Reviewed-by: Ian Maxon Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/317628af Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/317628af Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/317628af Branch: refs/heads/master Commit: 317628afed8d92bd328fbe486198ea91188c6ceb Parents: a91abc2 Author: Abdullah Alamoudi Authored: Mon Jul 30 14:40:01 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 30 16:33:34 2018 -0700 -- .../src/test/java/org/apache/asterix/test/common/TestExecutor.java | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/317628af/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index 73b3e70..afc3246 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -1182,6 +1182,7 @@ public class TestExecutor { if (testFile.getName().startsWith(DIAGNOSE)) { LOGGER.info("Diagnostic output: {}", IOUtils.toString(resultStream, StandardCharsets.UTF_8)); } else { +LOGGER.info("Unexpected output: {}", IOUtils.toString(resultStream, StandardCharsets.UTF_8)); Assert.fail("no result file for " + testFile.toString() + "; queryCount: " + queryCount + ", filectxs.size: " + numResultFiles); }
asterixdb git commit: [NO ISSUE][TEST] Fix Component Lifecycle Test
Repository: asterixdb Updated Branches: refs/heads/master a731afb17 -> a91abc2e5 [NO ISSUE][TEST] Fix Component Lifecycle Test Change-Id: Idb5156db0fb0e060d998851756ee3925c02b5791 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2827 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a91abc2e Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a91abc2e Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a91abc2e Branch: refs/heads/master Commit: a91abc2e54921d4eb8f98ed84a18142df663b6dd Parents: a731afb Author: Abdullah Alamoudi Authored: Mon Jul 30 08:39:30 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 30 14:37:23 2018 -0700 -- .../am/lsm/btree/LSMBTreeComponentLifecycleTest.java | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a91abc2e/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeComponentLifecycleTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeComponentLifecycleTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeComponentLifecycleTest.java index 21f3877..251f57a 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeComponentLifecycleTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeComponentLifecycleTest.java @@ -37,6 +37,7 @@ import org.apache.hyracks.storage.am.lsm.btree.impl.ITestOpCallback; import org.apache.hyracks.storage.am.lsm.btree.impl.NoOpTestCallback; import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestContext; import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestHarness; +import org.apache.hyracks.storage.am.lsm.common.api.IIoOperationFailedCallback; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent.LSMComponentType; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation; @@ -47,7 +48,6 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext; import org.apache.hyracks.storage.am.lsm.common.api.ILSMMemoryComponent; -import org.apache.hyracks.storage.am.lsm.common.api.IIoOperationFailedCallback; import org.apache.hyracks.storage.am.lsm.common.impls.AsynchronousScheduler; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; @@ -292,7 +292,7 @@ public class LSMBTreeComponentLifecycleTest { ILSMIndexOperationContext opCtx = accessor.getOpContext(); assertCorrectSearchComponents(opCtx, index, 0); // Allow one flush at a time and ensure that inserter didn't succeed -for (int i = 0; i < numFlushes - 1; i++) { +for (int i = 0; i < numFlushes - index.getNumberOfAllMemoryComponents(); i++) { flushSemaphore.release(); firstUser.step(); flushRequest.await(2 + i); @@ -300,21 +300,21 @@ public class LSMBTreeComponentLifecycleTest { // also ensure that you get the correct components when searching assertCorrectSearchComponents(opCtx, index, i + 1); } -// Allow last flush to proceed flushSemaphore.release(); +firstUser.step(); // wait for the insert to complete insertRequest.await(); +// Allow last flush to proceed +flushSemaphore.release(); firstUser.step(); firstUser.step(); flushRequest.await(); firstUser.stop(); secondUser.stop(); - int expectedMemoryComponent = numFlushes % numMemoryComponents; Assert.assertEquals(getExpectedMemoryComponentIndex(expectedMemoryComponent), index.getCurrentMemoryComponentIndex()); Assert.assertEquals(0, index.getDiskComponents().size()); - EncapsulatingIoCallback encapsulating = (EncapsulatingIoCallback) index.getIOOperationCallback(); CountingIoOperationCallback ioCallback = (CountingIoOperationCallback) encapsulating.getEncapsulated(); // assert equal before,
asterixdb git commit: [ASTERIXDB-2414][STO] Fix name of merge files
Repository: asterixdb Updated Branches: refs/heads/master ad4761481 -> a731afb17 [ASTERIXDB-2414][STO] Fix name of merge files - user model changes: no - storage format changes: no - interface changes: no Details: - A bug is found where merge file names are created incorrectly where start and end components are reversed. - The bug is fixed and an explicit check for the invariance was added. Change-Id: I861765bc0f293bdfdf0285f97884d536204fdb1e Reviewed-on: https://asterix-gerrit.ics.uci.edu/2820 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Luo Chen Reviewed-by: Wail Alkowaileet Reviewed-by: Ian Maxon Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a731afb1 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a731afb1 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a731afb1 Branch: refs/heads/master Commit: a731afb1724644b3f553662ac4cd97004adbd5eb Parents: ad47614 Author: Abdullah Alamoudi Authored: Thu Jul 26 22:14:08 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 30 14:36:51 2018 -0700 -- .../storage/am/lsm/btree/impls/ExternalBTree.java| 4 ++-- .../am/lsm/btree/impls/ExternalBTreeWithBuddy.java | 4 ++-- .../am/lsm/common/impls/AbstractLSMIndex.java| 4 ++-- .../common/impls/AbstractLSMIndexFileManager.java| 15 +-- .../lsm/common/impls/LSMComponentFileReferences.java | 6 ++ .../storage/am/lsm/rtree/impls/ExternalRTree.java| 4 ++-- 6 files changed, 27 insertions(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a731afb1/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java index 8be75be..2be5125 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java @@ -188,8 +188,8 @@ public class ExternalBTree extends LSMBTree implements ITwoPCIndex { } } LSMBTreeRangeSearchCursor cursor = new LSMBTreeRangeSearchCursor(opCtx, returnDeletedTuples); -BTree firstBTree = ((LSMBTreeDiskComponent) mergingComponents.get(0)).getIndex(); -BTree lastBTree = ((LSMBTreeDiskComponent) mergingComponents.get(mergingComponents.size() - 1)).getIndex(); +BTree lastBTree = ((LSMBTreeDiskComponent) mergingComponents.get(0)).getIndex(); +BTree firstBTree = ((LSMBTreeDiskComponent) mergingComponents.get(mergingComponents.size() - 1)).getIndex(); FileReference firstFile = firstBTree.getFileReference(); FileReference lastFile = lastBTree.getFileReference(); LSMComponentFileReferences relMergeFileRefs = http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a731afb1/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java index 5bcf30d..be91244 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java @@ -256,8 +256,8 @@ public class ExternalBTreeWithBuddy extends AbstractLSMIndex implements ITreeInd protected LSMComponentFileReferences getMergeTargetFileName(List mergingDiskComponents) throws HyracksDataException { -BTree firstTree = ((LSMBTreeWithBuddyDiskComponent) mergingDiskComponents.get(0)).getIndex(); -BTree lastTree = ((LSMBTreeWithBuddyDiskComponent) mergingDiskComponents.get(mergingDiskComponents.size() - 1)) +BTree lastTree = ((LSMBTreeWithBuddyDiskComponent) mergingDiskComponents.get(0)).getIndex(); +BTree firstTree =
asterixdb git commit: [ASTERIXDB-2414][STO] Remove deleted component files from buffer cache
Repository: asterixdb Updated Branches: refs/heads/master afadf2cad -> 825bf10fb [ASTERIXDB-2414][STO] Remove deleted component files from buffer cache - user model changes: no - storage format changes: no - interface changes: no Details: - When activating an LSM index, we remove files of components that were merged into a bigger component but not cleaned up yet. - However, we sometimes leave a file reference mapped in the buffer cache even when the file is removed from disk. - This change ensures that all files are removed from the buffer cache as well. Change-Id: If0f11bc222662e4b50c1b47b1dfa6b30d1463b2e Reviewed-on: https://asterix-gerrit.ics.uci.edu/2822 Sonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/825bf10f Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/825bf10f Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/825bf10f Branch: refs/heads/master Commit: 825bf10fbbfb7471208f0ba4bb809c771ecb5d07 Parents: afadf2c Author: Abdullah Alamoudi Authored: Sun Jul 29 10:50:00 2018 -0700 Committer: abdullah alamoudi Committed: Sun Jul 29 14:15:06 2018 -0700 -- .../am/lsm/btree/impls/LSMBTreeFileManager.java | 10 .../impls/LSMBTreeWithBuddyFileManager.java | 13 +-- .../impls/AbstractLSMIndexFileManager.java | 24 .../impls/LSMInvertedIndexFileManager.java | 19 .../am/lsm/rtree/impls/LSMRTreeFileManager.java | 17 +++--- .../TestStorageManagerComponentHolder.java | 20 .../component/TestLsmIndexFileManager.java | 10 .../common/test/LSMIndexFileManagerTest.java| 14 ++-- 8 files changed, 77 insertions(+), 50 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/825bf10f/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java index 54bc1fe..7fbde73 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeFileManager.java @@ -19,7 +19,6 @@ package org.apache.hyracks.storage.am.lsm.btree.impls; -import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; @@ -81,7 +80,8 @@ public class LSMBTreeFileManager extends AbstractLSMIndexFileManager { // create transaction filter FilenameFilter transactionFilter = getTransactionFileFilter(false); // List of valid BTree files. -cleanupAndGetValidFilesInternal(getCompoundFilter(transactionFilter, btreeFilter), btreeFactory, allBTreeFiles); +cleanupAndGetValidFilesInternal(getCompoundFilter(transactionFilter, btreeFilter), btreeFactory, allBTreeFiles, +btreeFactory.getBufferCache()); HashSet btreeFilesSet = new HashSet<>(); for (ComparableFileName cmpFileName : allBTreeFiles) { int index = cmpFileName.fileName.lastIndexOf(DELIMITER); @@ -90,7 +90,7 @@ public class LSMBTreeFileManager extends AbstractLSMIndexFileManager { if (hasBloomFilter) { validateFiles(btreeFilesSet, allBloomFilterFiles, getCompoundFilter(transactionFilter, bloomFilterFilter), -null); +null, btreeFactory.getBufferCache()); // Sanity check. if (allBTreeFiles.size() != allBloomFilterFiles.size()) { throw HyracksDataException.create(ErrorCode.UNEQUAL_NUM_FILTERS_TREES, baseDir); @@ -148,9 +148,9 @@ public class LSMBTreeFileManager extends AbstractLSMIndexFileManager { && (!hasBloomFilter || (currentBloomFilter.interval[0].compareTo(lastBloomFilter.interval[0]) >= 0 && currentBloomFilter.interval[1].compareTo(lastBloomFilter.interval[1]) <= 0))) { // Invalid files are completely contained in last interval. -IoUtil.delete(new File(currentBTree.fullPath)); +delete(btreeFactory.getBufferCache(), currentBTree.fullPath); if (hasBloomFilter) { -
asterixdb git commit: [NO ISSUE] Allow MetadataProvider config to store non String values
Repository: asterixdb Updated Branches: refs/heads/master d1867c053 -> eac3de5a0 [NO ISSUE] Allow MetadataProvider config to store non String values - user model changes: no - storage format changes: no - interface changes: yes Details: - In many cases, we would like to associate a value with a key in MetadataProvider to be accessed during the compilation of jobs. However, currently, there is no place to store such values, so we ended up storing them in the config map. - The config map is a map and so, we would write our values as a string and then parse them when needed. - To avoid this, and to avoid introducing a new map, we simply change the config stored in MetadataProvider from to . Change-Id: I55b392ad199d74b0f3cffdc38b54593b12ec1a06 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2795 Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Integration-Tests: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/eac3de5a Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/eac3de5a Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/eac3de5a Branch: refs/heads/master Commit: eac3de5a01d07da1af192ceab0443fec0891227b Parents: d1867c0 Author: Abdullah Alamoudi Authored: Wed Jul 25 12:27:42 2018 -0700 Committer: abdullah alamoudi Committed: Thu Jul 26 16:37:09 2018 -0700 -- .../asterix/optimizer/base/FuzzyUtils.java | 6 +-- .../optimizer/rules/am/AccessMethodUtils.java | 45 +--- .../apache/asterix/api/common/APIFramework.java | 20 + .../asterix/app/active/FeedEventsListener.java | 3 +- .../asterix/app/function/FeedRewriter.java | 4 +- .../asterix/app/translator/QueryTranslator.java | 5 ++- .../app/bootstrap/TestNodeController.java | 9 +++- .../asterix/test/sqlpp/ParserTestExecutor.java | 2 +- .../NoOpFrameOperationCallbackFactory.java | 5 +++ .../asterix/common/exceptions/ErrorCode.java| 1 + .../main/resources/asx_errormsg/en.properties | 1 + .../asterix/lang/common/util/FunctionUtil.java | 2 +- .../lang/sqlpp/rewrites/SqlppQueryRewriter.java | 2 +- .../metadata/declared/MetadataProvider.java | 20 ++--- .../asterix/metadata/entities/Dataset.java | 2 +- .../asterix/metadata/utils/DatasetUtil.java | 2 +- .../LSMPrimaryUpsertOperatorNodePushable.java | 14 +- .../management/service/logging/LogManager.java | 4 +- .../algebra/metadata/IMetadataProvider.java | 3 +- .../rules/EnforceStructuralPropertiesRule.java | 2 +- .../apache/hyracks/control/nc/CcConnection.java | 2 +- .../hyracks/ipc/impl/IPCConnectionManager.java | 4 +- .../lsm/common/api/IFrameOperationCallback.java | 7 +++ .../java/org/apache/hyracks/util/ExitUtil.java | 3 ++ 24 files changed, 104 insertions(+), 64 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/eac3de5a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java index 503a631..d7e05b3 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/FuzzyUtils.java @@ -60,7 +60,7 @@ public class FuzzyUtils { } public static IAObject getSimThreshold(MetadataProvider metadata, String simFuncName) { -String simThresholValue = metadata.getPropertyValue(SIM_THRESHOLD_PROP_NAME); +String simThresholValue = metadata.getProperty(SIM_THRESHOLD_PROP_NAME); IAObject ret = null; if (simFuncName.equals(JACCARD_FUNCTION_NAME)) { if (simThresholValue != null) { @@ -103,7 +103,7 @@ public class FuzzyUtils { public static float getSimThreshold(MetadataProvider metadata) { float simThreshold = JACCARD_DEFAULT_SIM_THRESHOLD; -String simThresholValue = metadata.getPropertyValue(SIM_THRESHOLD_PROP_NAME); +String simThresholValue = metadata.getProperty(SIM_THRESHOLD_PROP_NAME); if (simThresholValue != null) { simThreshold = Float.parseFloat(simThresholValue); } @@ -112,7 +112,7 @@ public class FuzzyUtils { // TODO: The default function depend on the input types. public static String getSimFunction(MetadataProvider metadata) { -String simFunction = metadata.getPropertyValue(SIM_FUNCTION_PROP_NAME); +String simFunction = metadata.getProperty(SIM_FUNCTION_PROP_NAME); if (simFunction == null) {
asterixdb git commit: [NO ISSUE][STO] Delete Resource File Before Checkpoints
Repository: asterixdb Updated Branches: refs/heads/master cedd961ae -> 3c8e98259 [NO ISSUE][STO] Delete Resource File Before Checkpoints - user model changes: no - storage format changes: no - interface changes: no Details: - To avoid a case where the index checkpoints can be deleted but a failure happens before the resource file is deleted, we delete the resource file first. Change-Id: Ia3351e9375007c0dbc415f5418458314233268d4 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2812 Reviewed-by: abdullah alamoudi Sonar-Qube: Jenkins Tested-by: Jenkins Integration-Tests: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/3c8e9825 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/3c8e9825 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/3c8e9825 Branch: refs/heads/master Commit: 3c8e982591762fe19ee870ff3c36218996dae8b0 Parents: cedd961 Author: Murtadha Hubail Authored: Wed Jul 25 14:50:23 2018 -0700 Committer: abdullah alamoudi Committed: Wed Jul 25 18:57:58 2018 -0700 -- .../management/resource/PersistentLocalResourceRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3c8e9825/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java -- diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java index 93d9414..f9718c4 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java @@ -237,13 +237,13 @@ public class PersistentLocalResourceRepository implements ILocalResourceReposito if (isReplicationEnabled) { createReplicationJob(ReplicationOperation.DELETE, resourceFile); } -// delete all checkpoints final LocalResource localResource = readLocalResource(resourceFile.getFile()); - indexCheckpointManagerProvider.get(DatasetResourceReference.of(localResource)).delete(); // Invalidate before deleting the file just in case file deletion throws some exception. // Since it's just a cache invalidation, it should not affect correctness. resourceCache.invalidate(relativePath); IoUtil.delete(resourceFile); +// delete all checkpoints + indexCheckpointManagerProvider.get(DatasetResourceReference.of(localResource)).delete(); } else { throw HyracksDataException.create(org.apache.hyracks.api.exceptions.ErrorCode.RESOURCE_DOES_NOT_EXIST, relativePath);
asterixdb git commit: [NO ISSUE][RT] Abort tasks on local network failures
Repository: asterixdb Updated Branches: refs/heads/master b2eb44177 -> a7d87c698 [NO ISSUE][RT] Abort tasks on local network failures - user model changes: no - storage format changes: no - interface changes: yes Add error code to IInputChannelMonitor.notifyFailure Details: - Previously, there was an assumption that all failures reported to an IInputChannelMonitor come from a remote task. - This assumption is not always true and could lead to jobs hanging. - To fix this, we report an error code indicating whether the failure is local or remote and if the failure is local then we fail the local task and report the failure to cc. Change-Id: I7ea5b9008383faaac7c563671242b03919090b35 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2806 Sonar-Qube: Jenkins Reviewed-by: Murtadha Hubail Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a7d87c69 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a7d87c69 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a7d87c69 Branch: refs/heads/master Commit: a7d87c698736d875e8949fa8bf3ad8ad5541492e Parents: b2eb441 Author: Abdullah Alamoudi Authored: Tue Jul 24 16:28:13 2018 -0700 Committer: abdullah alamoudi Committed: Tue Jul 24 18:15:13 2018 -0700 -- .../api/channels/IInputChannelMonitor.java | 6 ++--- .../hyracks/api/exceptions/ErrorCode.java | 1 + .../src/main/resources/errormsg/en.properties | 1 + .../client/dataset/HyracksDatasetReader.java| 2 +- .../channels/DatasetNetworkInputChannel.java| 2 +- .../comm/channels/NetworkInputChannel.java | 2 +- .../comm/channels/NetworkOutputChannel.java | 4 +-- .../org/apache/hyracks/control/nc/Task.java | 3 ++- .../ReceiveSideMaterializingCollector.java | 2 +- .../hyracks/hyracks-dataflow-std/pom.xml| 5 .../std/collectors/InputChannelFrameReader.java | 27 ++-- .../NonDeterministicChannelReader.java | 13 +- .../muxdemux/AbstractChannelReadInterface.java | 4 --- .../muxdemux/AbstractChannelWriteInterface.java | 6 +++-- .../net/protocols/muxdemux/ChannelSet.java | 2 +- 15 files changed, 54 insertions(+), 26 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a7d87c69/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/channels/IInputChannelMonitor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/channels/IInputChannelMonitor.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/channels/IInputChannelMonitor.java index 52509d3..559f49a 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/channels/IInputChannelMonitor.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/channels/IInputChannelMonitor.java @@ -19,9 +19,9 @@ package org.apache.hyracks.api.channels; public interface IInputChannelMonitor { -public void notifyFailure(IInputChannel channel); +void notifyFailure(IInputChannel channel, int errorCode); -public void notifyDataAvailability(IInputChannel channel, int nFrames); +void notifyDataAvailability(IInputChannel channel, int nFrames); -public void notifyEndOfStream(IInputChannel channel); +void notifyEndOfStream(IInputChannel channel); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a7d87c69/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java index b6d7cc7..09193d9 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java @@ -148,6 +148,7 @@ public class ErrorCode { public static final int CANNOT_ADD_ELEMENT_TO_INVERTED_INDEX_SEARCH_RESULT = 112; public static final int UNDEFINED_INVERTED_LIST_MERGE_TYPE = 113; public static final int NODE_IS_NOT_ACTIVE = 114; +public static final int LOCAL_NETWORK_ERROR = 115; // Compilation error codes. public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 1; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a7d87c69/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
[1/2] asterixdb git commit: [NO ISSUE] Report all BufferCache write failures.
Repository: asterixdb Updated Branches: refs/heads/master 47ab031e8 -> 7c72a503d http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7c72a503/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AsyncFIFOPageQueueManager.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AsyncFIFOPageQueueManager.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AsyncFIFOPageQueueManager.java index dbead1e..589d697 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AsyncFIFOPageQueueManager.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AsyncFIFOPageQueueManager.java @@ -24,15 +24,19 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.storage.common.file.BufferedFileHandle; +import org.apache.hyracks.util.ExitUtil; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class AsyncFIFOPageQueueManager implements Runnable { -private final static boolean DEBUG = false; +private static final boolean DEBUG = false; +private static final Logger LOGGER = LogManager.getLogger(); -protected LinkedBlockingQueue queue = new LinkedBlockingQueue(); +protected LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); volatile Thread writerThread; protected AtomicBoolean poisoned = new AtomicBoolean(false); protected BufferCache bufferCache; -volatile protected PageQueue pageQueue; +protected volatile PageQueue pageQueue; public AsyncFIFOPageQueueManager(BufferCache bufferCache) { this.bufferCache = bufferCache; @@ -57,17 +61,27 @@ public class AsyncFIFOPageQueueManager implements Runnable { return writer; } +@SuppressWarnings("squid:S2142") @Override -public void put(ICachedPage page) throws HyracksDataException { +public void put(ICachedPage page, IPageWriteFailureCallback callback) throws HyracksDataException { +failIfPreviousPageFailed(callback); +page.setFailureCallback(callback); try { if (!poisoned.get()) { queue.put(page); } else { -throw new HyracksDataException("Queue is closing"); +LOGGER.error("An attempt to write a page found buffer cache closed"); +ExitUtil.halt(ExitUtil.EC_ABNORMAL_TERMINATION); } } catch (InterruptedException e) { -Thread.currentThread().interrupt(); -throw HyracksDataException.create(e); +LOGGER.error("IO Operation interrupted", e); +ExitUtil.halt(ExitUtil.EC_ABNORMAL_TERMINATION); +} +} + +private void failIfPreviousPageFailed(IPageWriteFailureCallback callback) throws HyracksDataException { +if (callback.hasFailed()) { +throw HyracksDataException.create(callback.getFailure()); } } } @@ -136,18 +150,21 @@ public class AsyncFIFOPageQueueManager implements Runnable { } } +@SuppressWarnings("squid:S2142") @Override public void run() { -if (DEBUG) -System.out.println("[FIFO] Writer started"); +if (DEBUG) { +LOGGER.info("[FIFO] Writer started"); +} boolean die = false; while (!die) { ICachedPage entry; try { entry = queue.take(); } catch (InterruptedException e) { -Thread.currentThread().interrupt(); -break; +LOGGER.error("BufferCache Write Queue was interrupted", e); +ExitUtil.halt(ExitUtil.EC_ABNORMAL_TERMINATION); +return; // Keep compiler happy } if (entry.getQueueInfo() != null && entry.getQueueInfo().hasWaiters()) { synchronized (entry) { @@ -158,17 +175,11 @@ public class AsyncFIFOPageQueueManager implements Runnable { continue; } } - -if (DEBUG) -System.out.println("[FIFO] Write " + BufferedFileHandle.getFileId(((CachedPage) entry).dpid) + "," +if (DEBUG) { +LOGGER.info("[FIFO] Write " + BufferedFileHandle.getFileId(((CachedPage) entry).dpid) + "," + BufferedFileHandle.getPageId(((CachedPage) entry).dpid)); - -try { -pageQueue.getWriter().write(entry, bufferCache); -
[2/2] asterixdb git commit: [NO ISSUE] Report all BufferCache write failures.
[NO ISSUE] Report all BufferCache write failures. - user model changes: no - storage format changes: no - interface changes: yes + IPageWriteFailureCallback: used to notify async IO caller when something goes wrong. Details: - Before this change, it is possible for failures to be lost and for bulkload operations to not be aware of failure to write some pages. This can be dangerous. - To avoid this, when sending a page to be written a PageWriteFailureCallback is associated with the page to notify the caller that a failure took place. Change-Id: I97fd3dccff85dab84d644359be6f66b15ee708ef Reviewed-on: https://asterix-gerrit.ics.uci.edu/2787 Sonar-Qube: Jenkins Tested-by: Jenkins Integration-Tests: Jenkins Contrib: Jenkins Reviewed-by: Luo Chen Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7c72a503 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7c72a503 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7c72a503 Branch: refs/heads/master Commit: 7c72a503d18cd870dd18fe61e27fb04c7a18f442 Parents: 47ab031 Author: Abdullah Alamoudi Authored: Mon Jul 23 14:31:23 2018 -0700 Committer: abdullah alamoudi Committed: Tue Jul 24 11:13:31 2018 -0700 -- .../am/bloomfilter/impls/BloomFilter.java | 32 +--- .../hyracks/storage/am/btree/impls/BTree.java | 12 ++--- .../storage/am/common/api/IPageManager.java | 11 - .../AppendOnlyLinkedMetadataPageManager.java| 7 ++- .../freepage/LinkedMetaDataPageManager.java | 8 ++- .../am/common/impls/AbstractTreeIndex.java | 38 +++ .../am/lsm/btree/impls/ExternalBTree.java | 25 -- .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 25 -- ...AbstractLSMWithBloomFilterDiskComponent.java | 5 +- .../api/AbstractLSMWithBuddyDiskComponent.java | 7 +-- .../am/lsm/common/api/ILSMDiskComponent.java| 5 +- .../storage/am/lsm/common/api/ILSMHarness.java | 6 +-- .../am/lsm/common/api/ILSMIOOperation.java | 4 +- .../common/freepage/VirtualFreePageManager.java | 3 +- .../lsm/common/impls/AbstractIoOperation.java | 13 - .../common/impls/AbstractLSMDiskComponent.java | 5 +- .../lsm/common/impls/BloomFilterBulkLoader.java | 16 ++ .../ChainedLSMDiskComponentBulkLoader.java | 43 ++--- .../am/lsm/common/impls/EmptyComponent.java | 3 +- .../lsm/common/impls/ExternalIndexHarness.java | 13 - .../am/lsm/common/impls/FilterBulkLoader.java | 16 ++ .../impls/IChainedComponentBulkLoader.java | 3 +- .../common/impls/IndexWithBuddyBulkLoader.java | 21 .../storage/am/lsm/common/impls/LSMHarness.java | 15 -- .../am/lsm/common/impls/LSMIndexBulkLoader.java | 16 ++ .../impls/LSMIndexDiskComponentBulkLoader.java | 18 ++- .../am/lsm/common/impls/NoOpIoOperation.java| 11 + .../am/lsm/common/impls/TracedIOOperation.java | 11 + .../am/lsm/common/util/ComponentUtils.java | 11 +++-- .../impls/LSMInvertedIndexDiskComponent.java| 15 -- .../ondisk/OnDiskInvertedIndex.java | 11 +++-- .../am/lsm/rtree/impls/ExternalRTree.java | 25 -- .../hyracks/storage/am/rtree/impls/RTree.java | 10 ++-- .../hyracks/hyracks-storage-common/pom.xml | 5 ++ .../storage/common/IIndexBulkLoader.java| 4 +- .../buffercache/AsyncFIFOPageQueueManager.java | 51 .../storage/common/buffercache/CachedPage.java | 29 +-- .../common/buffercache/FIFOLocalWriter.java | 28 ++- .../buffercache/HaltOnFailureCallback.java | 44 + .../storage/common/buffercache/ICachedPage.java | 4 ++ .../common/buffercache/ICachedPageInternal.java | 11 +++-- .../common/buffercache/IFIFOPageQueue.java | 17 ++- .../common/buffercache/IFIFOPageWriter.java | 7 +-- .../buffercache/IPageWriteFailureCallback.java | 43 + .../buffercache/PageWriteFailureCallback.java | 42 .../storage/common/buffercache/VirtualPage.java | 10 .../am/btree/DiskBTreeSearchCursorTest.java | 3 ++ .../hyracks/storage/common/BufferCacheTest.java | 4 +- 48 files changed, 610 insertions(+), 156 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7c72a503/hyracks-fullstack/hyracks/hyracks-storage-am-bloomfilter/src/main/java/org/apache/hyracks/storage/am/bloomfilter/impls/BloomFilter.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-bloomfilter/src/main/java/org/apache/hyracks/storage/am/bloomfilter/impls/BloomFilter.java
asterixdb git commit: [NO ISSUE][RT] Improve logging in task related works
Repository: asterixdb Updated Branches: refs/heads/master ca5dc823b -> 072da02e4 [NO ISSUE][RT] Improve logging in task related works Change-Id: Ia4e24a95aaac37b1d3d0d9a35266109ae0315293 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2803 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/072da02e Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/072da02e Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/072da02e Branch: refs/heads/master Commit: 072da02e4c6e7845a28ada591fc441f3a78fd20d Parents: ca5dc82 Author: Abdullah Alamoudi Authored: Mon Jul 23 14:22:14 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 23 17:54:13 2018 -0700 -- .../apache/hyracks/control/cc/job/JobManager.java | 16 .../java/org/apache/hyracks/control/nc/Task.java| 8 +++- .../control/nc/work/NotifyTaskCompleteWork.java | 3 ++- .../control/nc/work/NotifyTaskFailureWork.java | 5 + .../std/collectors/InputChannelFrameReader.java | 4 .../collectors/NonDeterministicChannelReader.java | 7 +++ 6 files changed, 29 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/072da02e/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java index b6b3e40..7dc636c 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java @@ -221,17 +221,17 @@ public class JobManager implements IJobManager { JobId jobId = run.getJobId(); Throwable caughtException = null; CCServiceContext serviceCtx = ccs.getContext(); -if (serviceCtx != null) { -try { -serviceCtx.notifyJobFinish(jobId, run.getPendingStatus(), run.getPendingExceptions()); -} catch (Exception e) { -LOGGER.error("Exception notifying job finish {}", jobId, e); -caughtException = e; -} +try { +serviceCtx.notifyJobFinish(jobId, run.getPendingStatus(), run.getPendingExceptions()); +} catch (Exception e) { +LOGGER.error("Exception notifying job finish {}", jobId, e); +caughtException = e; } run.setStatus(run.getPendingStatus(), run.getPendingExceptions()); run.setEndTime(System.currentTimeMillis()); -activeRunMap.remove(jobId); +if (activeRunMap.remove(jobId) == null) { +LOGGER.warn("Job {} was not found running but is getting archived and capacity released", jobId); +} runMapArchive.put(jobId, run); runMapHistory.put(jobId, run.getExceptions()); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/072da02e/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java index d7b930c..23a5abb 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java @@ -290,7 +290,7 @@ public class Task implements IHyracksTaskContext, ICounterContext, Runnable { .schedule(new NotifyTaskFailureWork(ncs, this, exceptions, joblet.getJobId(), taskAttemptId)); return; } -ct.setName(displayName + ":" + taskAttemptId + ":" + 0); +ct.setName(displayName + ":" + joblet.getJobId() + ":" + taskAttemptId + ":" + 0); try { Throwable operatorException = null; try { @@ -469,4 +469,10 @@ public class Task implements IHyracksTaskContext, ICounterContext, Runnable { public boolean isCompleted() { return completed; } + +@Override +public String
asterixdb git commit: [NO ISSUE][OBS] Log content of index dir with missing checkpoints
Repository: asterixdb Updated Branches: refs/heads/master 19ca14e87 -> ca5dc823b [NO ISSUE][OBS] Log content of index dir with missing checkpoints - user model changes: no - storage format changes: no - interface changes: no Details: - When an index is missing checkpoint file, it should contain the mask and gets cleaned up on bootstrap. when that doesn't happen, we should log the content of the dir to help investigating. Change-Id: I1903a40e129f648d4a0f8be6e820c6d45c722bec Reviewed-on: https://asterix-gerrit.ics.uci.edu/2801 Sonar-Qube: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Tested-by: Jenkins Integration-Tests: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/ca5dc823 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/ca5dc823 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/ca5dc823 Branch: refs/heads/master Commit: ca5dc823b63d723ac3bdfcd4a7bff729ecf6023f Parents: 19ca14e Author: Abdullah Alamoudi Authored: Mon Jul 23 13:54:46 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 23 16:10:14 2018 -0700 -- .../java/org/apache/asterix/app/nc/IndexCheckpointManager.java| 3 +++ 1 file changed, 3 insertions(+) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ca5dc823/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java index c1a81a3..64d8e93 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java @@ -27,6 +27,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Optional; @@ -141,6 +142,8 @@ public class IndexCheckpointManager implements IIndexCheckpointManager { throw HyracksDataException.create(e); } if (checkpoints.isEmpty()) { +LOGGER.warn("Couldn't find any checkpoint file for index {}. Content of dir are {}.", indexPath, +Arrays.toString(indexPath.toFile().listFiles())); throw new IllegalStateException("Couldn't find any checkpoints for resource: " + indexPath); } checkpoints.sort(Comparator.comparingLong(IndexCheckpoint::getId).reversed());
asterixdb git commit: [NO ISSUE][STO] Cleanup corrupted resources on failed creation
Repository: asterixdb Updated Branches: refs/heads/master 1708bb553 -> fe759264b [NO ISSUE][STO] Cleanup corrupted resources on failed creation - user model changes: no - storage format changes: no - interface changes: no Details: - In some cases, when a rebalance is cancelled by the user, we abort the process of creating local resources on nodes. When that happens, it can leave corrupted resources that causes subsequent drop and/or create to fail until the node is restarted. - To avoid this, we make sure that the operation that creates the resource is atomic. Change-Id: I095a8eb0f1be2a9aa0fc269770978691746c3cec Reviewed-on: https://asterix-gerrit.ics.uci.edu/2800 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/fe759264 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/fe759264 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/fe759264 Branch: refs/heads/master Commit: fe759264bbfd3ae683642ec1c8d4aa4eb75e37a7 Parents: 1708bb5 Author: Abdullah Alamoudi Authored: Sun Jul 22 09:53:47 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 23 11:08:39 2018 -0700 -- .../PersistentLocalResourceRepository.java | 27 +--- .../java/org/apache/hyracks/util/ExitUtil.java | 2 ++ 2 files changed, 25 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/fe759264/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java -- diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java index 7cd31bb..93d9414 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java @@ -73,6 +73,7 @@ import org.apache.hyracks.storage.am.common.api.ITreeIndexFrame; import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager; import org.apache.hyracks.storage.common.ILocalResourceRepository; import org.apache.hyracks.storage.common.LocalResource; +import org.apache.hyracks.util.ExitUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -182,6 +183,7 @@ public class PersistentLocalResourceRepository implements ILocalResourceReposito return resource; } +@SuppressWarnings("squid:S1181") @Override public synchronized void insert(LocalResource resource) throws HyracksDataException { String relativePath = getFileName(resource.getPath()); @@ -194,16 +196,21 @@ public class PersistentLocalResourceRepository implements ILocalResourceReposito if (!parent.exists() && !parent.mkdirs()) { throw HyracksDataException.create(CANNOT_CREATE_FILE, parent.getAbsolutePath()); } -createResourceFileMask(resourceFile); +// The next block should be all or nothing try { +createResourceFileMask(resourceFile); byte[] bytes = OBJECT_MAPPER.writeValueAsBytes(resource.toJson(persistedResourceRegistry)); final Path path = Paths.get(resourceFile.getAbsolutePath()); Files.write(path, bytes); -} catch (IOException e) { + indexCheckpointManagerProvider.get(DatasetResourceReference.of(resource)).init(null, 0); +deleteResourceFileMask(resourceFile); +} catch (Exception e) { +cleanup(resourceFile); throw HyracksDataException.create(e); +} catch (Throwable th) { +LOGGER.error("Error creating resource {}", resourceFile, th); +ExitUtil.halt(ExitUtil.EC_ERROR_CREATING_RESOURCES); } - indexCheckpointManagerProvider.get(DatasetResourceReference.of(resource)).init(null, 0); -deleteResourceFileMask(resourceFile); resourceCache.put(resource.getPath(), resource); //if replication enabled, send resource metadata info to remote nodes if (isReplicationEnabled) { @@ -211,6 +218,18 @@ public class PersistentLocalResourceRepository implements ILocalResourceReposito } } +@SuppressWarnings("squid:S1181") +private void cleanup(FileReference resourceFile) {
asterixdb git commit: [NO ISSUE][MISC] Introduce IClientRequest
Repository: asterixdb Updated Branches: refs/heads/master a7aaf7110 -> 7df888fff [NO ISSUE][MISC] Introduce IClientRequest - user model changes: no - storage format changes: no - interface changes: yes + IClientRequest: used to represent a client request that can be cancelled. Details: - Introduce IClientRequest to allow for multiple types of requests to be cancellable. Change-Id: I8f65da1744ea7ecf26ea3f8a576ebaf4472ccd62 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2774 Sonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7df888ff Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7df888ff Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7df888ff Branch: refs/heads/master Commit: 7df888fffcb946f639b2c58ef4463d660244a567 Parents: a7aaf71 Author: Abdullah Alamoudi Authored: Wed Jul 18 08:30:00 2018 -0700 Committer: abdullah alamoudi Committed: Sun Jul 22 14:02:28 2018 -0700 -- .../algebra/extension/ExtensionStatement.java | 6 +- .../asterix/translator/BaseClientRequest.java | 54 + .../asterix/translator/ClientJobRequest.java| 44 +++ .../translator/IStatementExecutorContext.java | 19 +++-- .../NoOpStatementExecutorContext.java | 8 +- .../api/http/ctx/StatementExecutorContext.java | 13 ++-- .../http/server/CcQueryCancellationServlet.java | 76 +++ .../http/server/NCQueryCancellationServlet.java | 3 +- .../http/server/QueryCancellationServlet.java | 79 .../api/http/server/QueryServiceServlet.java| 2 +- .../asterix/app/message/CancelQueryRequest.java | 12 ++- .../asterix/app/translator/QueryTranslator.java | 11 ++- .../hyracks/bootstrap/CCApplication.java| 4 +- .../servlet/QueryCancellationServletTest.java | 15 ++-- .../asterix/common/api/IClientRequest.java | 38 ++ .../metadata/declared/MetadataProvider.java | 1 + 16 files changed, 262 insertions(+), 123 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7df888ff/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java index 15267aa..a37f802 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java @@ -22,6 +22,7 @@ import org.apache.asterix.lang.common.base.AbstractStatement; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.translator.IRequestParameters; import org.apache.asterix.translator.IStatementExecutor; +import org.apache.asterix.translator.IStatementExecutorContext; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.exceptions.HyracksDataException; @@ -45,10 +46,11 @@ public abstract class ExtensionStatement extends AbstractStatement { * @param requestParameters * @param metadataProvider * @param resultSetId + * @param executorCtx * @throws HyracksDataException * @throws AlgebricksException */ public abstract void handle(IHyracksClientConnection hcc, IStatementExecutor statementExecutor, -IRequestParameters requestParameters, MetadataProvider metadataProvider, int resultSetId) -throws HyracksDataException, AlgebricksException; +IRequestParameters requestParameters, MetadataProvider metadataProvider, int resultSetId, +IStatementExecutorContext executorCtx) throws HyracksDataException, AlgebricksException; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7df888ff/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java new file mode 100644 index 000..a9bd856 --- /dev/null +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF)
asterixdb git commit: [NO ISSUE][STO] Log more information on File is already mapped
Repository: asterixdb Updated Branches: refs/heads/master 91384f6ca -> 669c1d9c8 [NO ISSUE][STO] Log more information on File is already mapped Change-Id: Ifcc1d56a29c67e0cfc999defc00894f456c92ca9 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2791 Sonar-Qube: Jenkins Tested-by: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/669c1d9c Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/669c1d9c Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/669c1d9c Branch: refs/heads/master Commit: 669c1d9c829995e4f1fdca883fde31feaf72bdb5 Parents: 91384f6 Author: Abdullah Alamoudi Authored: Thu Jul 19 17:16:35 2018 -0700 Committer: abdullah alamoudi Committed: Thu Jul 19 18:43:47 2018 -0700 -- .../org/apache/asterix/app/nc/HaltCallback.java | 2 +- .../apache/hyracks/api/io/FileReference.java| 21 .../src/main/resources/errormsg/en.properties | 2 +- .../storage/common/file/FileMapManager.java | 10 -- 4 files changed, 31 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/669c1d9c/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/HaltCallback.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/HaltCallback.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/HaltCallback.java index db34131..17a4f46 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/HaltCallback.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/HaltCallback.java @@ -41,7 +41,7 @@ public class HaltCallback implements IIoOperationFailedCallback { @Override public void operationFailed(ILSMIOOperation operation, Throwable t) { -LOGGER.error("Operation {} has failed", t); +LOGGER.error("Operation {} has failed", operation, t); if (operation.getIOOpertionType() == LSMIOOperationType.FLUSH) { ExitUtil.halt(ExitUtil.EC_FLUSH_FAILED); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/669c1d9c/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/io/FileReference.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/io/FileReference.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/io/FileReference.java index 0375e9e..4ded855 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/io/FileReference.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/io/FileReference.java @@ -20,6 +20,7 @@ package org.apache.hyracks.api.io; import java.io.File; import java.io.Serializable; +import java.util.Date; /** * A device handle and a relative path. @@ -31,6 +32,7 @@ public final class FileReference implements Serializable { private final File file; private final IODeviceHandle dev; private final String path; +private long registrationTime = 0L; public FileReference(IODeviceHandle dev, String path) { file = new File(dev.getMount(), path); @@ -90,4 +92,23 @@ public final class FileReference implements Serializable { public FileReference getChild(String name) { return new FileReference(dev, path + File.separator + name); } + +public void register() { +if (registrationTime != 0) { +throw new IllegalStateException( +"File " + toString() + " was already registered at " + new Date(registrationTime)); +} +registrationTime = System.currentTimeMillis(); +} + +public long registrationTime() { +return registrationTime; +} + +public void unregister() { +if (registrationTime == 0) { +throw new IllegalStateException("File " + toString() + " wasn't registered before"); +} +registrationTime = 0; +} } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/669c1d9c/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties index ef07038..bf73b91 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties @@ -97,7 +97,7 @@ 78 = Failed to purge the bloom filter since it is active 79 = Cannot
asterixdb git commit: [NO ISSUE][MISC] Add ping function
Repository: asterixdb Updated Branches: refs/heads/master 488162719 -> 36124bdea [NO ISSUE][MISC] Add ping function - user model changes: no - storage format changes: no - interface changes: no Details: - Add a ping function that takes 0 parameters and simply returns a single record from each node which contains the node id. Change-Id: Ic077a11b61dec782756e2dede33ca8220893a2de Reviewed-on: https://asterix-gerrit.ics.uci.edu/2764 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/36124bde Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/36124bde Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/36124bde Branch: refs/heads/master Commit: 36124bdeaa74fdc1bbb4931247dd969d78b4917d Parents: 4881627 Author: Abdullah Alamoudi Authored: Mon Jul 16 00:04:57 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 16 16:08:16 2018 -0700 -- .../asterix/app/function/PingDatasource.java| 44 + .../asterix/app/function/PingFunction.java | 41 .../apache/asterix/app/function/PingReader.java | 50 .../asterix/app/function/PingRewriter.java | 43 + .../asterix/util/MetadataBuiltinFunctions.java | 7 ++- .../queries_sqlpp/misc/ping/ping.1.query.sqlpp | 21 .../runtimets/results/misc/ping/ping.1.adm | 2 + .../resources/runtimets/testsuite_sqlpp.xml | 5 ++ 8 files changed, 212 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/36124bde/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java new file mode 100644 index 000..480f3c4 --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.app.function; + +import org.apache.asterix.metadata.api.IDatasourceFunction; +import org.apache.asterix.metadata.declared.DataSourceId; +import org.apache.asterix.metadata.declared.FunctionDataSource; +import org.apache.asterix.metadata.declared.MetadataProvider; +import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain; + +public class PingDatasource extends FunctionDataSource { + +private static final DataSourceId PING_DATASOURCE_ID = +new DataSourceId(PingRewriter.PING.getNamespace(), PingRewriter.PING.getName()); + +public PingDatasource(INodeDomain domain) throws AlgebricksException { +super(PING_DATASOURCE_ID, domain); +} + +@Override +protected IDatasourceFunction createFunction(MetadataProvider metadataProvider, +AlgebricksAbsolutePartitionConstraint locations) { +return new PingFunction(locations); +} + +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/36124bde/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java new file mode 100644 index 000..c37ed7d --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license
asterixdb git commit: [NO ISSUE][ING] Add timeout to stop active message
Repository: asterixdb Updated Branches: refs/heads/master 571236390 -> 488162719 [NO ISSUE][ING] Add timeout to stop active message Change-Id: Ie0416d76670e945cb958f5a1c235201a3e016009 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2762 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/48816271 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/48816271 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/48816271 Branch: refs/heads/master Commit: 488162719bfc2748bb400960664eafce54dbd191 Parents: 5712363 Author: Abdullah Alamoudi Authored: Sun Jul 15 23:08:47 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jul 16 09:27:51 2018 -0700 -- .../apache/asterix/active/ActiveManager.java| 24 ++ .../ActiveSourceOperatorNodePushable.java | 11 +++-- .../apache/asterix/active/IActiveRuntime.java | 9 +++- .../active/message/StopRuntimeParameters.java | 50 .../app/active/ActiveEntityEventsListener.java | 21 .../test/active/DummyFeedEventsListener.java| 3 +- .../asterix/test/active/TestEventsListener.java | 5 +- .../FeedIntakeOperatorNodePushable.java | 8 ++-- .../apache/hyracks/api/util/CleanupUtils.java | 3 +- .../java/org/apache/hyracks/util/ExitUtil.java | 1 + 10 files changed, 106 insertions(+), 29 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/48816271/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java index 2aebc59..6373d6c 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java @@ -33,6 +33,7 @@ import java.util.concurrent.TimeoutException; import org.apache.asterix.active.message.ActiveManagerMessage; import org.apache.asterix.active.message.ActiveStatsRequestMessage; import org.apache.asterix.active.message.ActiveStatsResponse; +import org.apache.asterix.active.message.StopRuntimeParameters; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.common.exceptions.RuntimeDataException; import org.apache.asterix.common.memory.ConcurrentFramePool; @@ -40,6 +41,7 @@ import org.apache.hyracks.api.application.INCServiceContext; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.util.JavaSerializationUtils; import org.apache.hyracks.control.nc.NodeControllerService; +import org.apache.hyracks.util.ExitUtil; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -139,7 +141,7 @@ public class ActiveManager { shutdown = true; runtimes.forEach((runtimeId, runtime) -> stopFutures.put(runtimeId, executor.submit(() -> { // we may already have been stopped- only stop once -stopIfRunning(runtimeId, runtime); +stopIfRunning(runtime, SHUTDOWN_TIMEOUT_SECS, TimeUnit.SECONDS); return null; }))); stopFutures.entrySet().parallelStream().forEach(entry -> { @@ -157,8 +159,10 @@ public class ActiveManager { LOGGER.warn("Shutdown ActiveManager on node " + nodeId + " complete"); } +@SuppressWarnings("squid:S1181") // Catch Error private void stopRuntime(ActiveManagerMessage message) { -ActiveRuntimeId runtimeId = (ActiveRuntimeId) message.getPayload(); +StopRuntimeParameters content = (StopRuntimeParameters) message.getPayload(); +ActiveRuntimeId runtimeId = content.getRuntimeId(); IActiveRuntime runtime = runtimes.get(runtimeId); if (runtime == null) { LOGGER.warn("Request to stop runtime: " + runtimeId @@ -167,21 +171,23 @@ public class ActiveManager { } else { executor.execute(() -> { try { -stopIfRunning(runtimeId, runtime); +stopIfRunning(runtime, content.getTimeout(), content.getUnit()); } catch (Exception e) { -// TODO(till) Figure out a better way to handle failure to stop a runtime -LOGGER.log(Level.WARN, "Failed to stop runtime: " + runtimeId, e); +LOGGER.warn("Failed to stop runtime: {}", runtimeId, e); +} catch (Throwable th) { +
asterixdb git commit: [NO ISSUE][TEST] Improve extensibility of test framework
Repository: asterixdb Updated Branches: refs/heads/master 36d98e9b2 -> 26457e366 [NO ISSUE][TEST] Improve extensibility of test framework Change-Id: Ibaa9722cbc46a2eced6295fa6b896f38fa3c9e50 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2753 Sonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/26457e36 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/26457e36 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/26457e36 Branch: refs/heads/master Commit: 26457e366f9c7e3c0fc1931e2e6c33d7f13d0187 Parents: 36d98e9 Author: Abdullah Alamoudi Authored: Wed Jul 11 14:40:04 2018 -0700 Committer: abdullah alamoudi Committed: Fri Jul 13 12:53:29 2018 -0700 -- .../org/apache/asterix/test/common/TestExecutor.java | 9 + .../testframework/context/TestCaseContext.java | 15 +++ .../testframework/context/TestFileContext.java | 7 +++ 3 files changed, 27 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/26457e36/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index 3c51775..5aff17f 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -30,7 +30,6 @@ import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringWriter; -import java.math.BigDecimal; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.Socket; @@ -97,8 +96,6 @@ import org.apache.hyracks.util.StorageUtil; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - -import com.fasterxml.jackson.databind.util.RawValue; import org.junit.Assert; import com.fasterxml.jackson.core.JsonProcessingException; @@ -107,6 +104,7 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.util.RawValue; public class TestExecutor { @@ -1909,8 +1907,9 @@ public class TestExecutor { } } -abstract static class TestLoop extends Exception { +public abstract static class TestLoop extends Exception { +private static final long serialVersionUID = 1L; private final String target; TestLoop(String target) { @@ -1920,6 +1919,7 @@ public class TestExecutor { static TestLoop createLoop(String target, final int count) { LOGGER.info("Starting loop '" + count + " times back to '" + target + "'..."); return new TestLoop(target) { +private static final long serialVersionUID = 1L; int remainingLoops = count; @Override @@ -1935,6 +1935,7 @@ public class TestExecutor { static TestLoop createLoop(String target, long duration, TimeUnit unit) { LOGGER.info("Starting loop for " + unit.toSeconds(duration) + "s back to '" + target + "'..."); return new TestLoop(target) { +private static final long serialVersionUID = 1L; long endTime = unit.toMillis(duration) + System.currentTimeMillis(); @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/26457e36/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java -- diff --git a/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java b/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java index 4735c67..4357f14 100644 --- a/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java +++ b/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java @@ -22,7 +22,9 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Pattern; import
[2/2] asterixdb git commit: [NO ISSUE][FUN] Implement array functions p1
[NO ISSUE][FUN] Implement array functions p1 - user model changes: no - storage format changes: no - interface changes: no details: This is part of implementing array functions. This patch includes array_insert(), array_append(), array_prepend() array_put() and array_remove(). It includes re-organization of those functions. Change-Id: I7d9cb80325138daf99fb039793446d109481c94b Reviewed-on: https://asterix-gerrit.ics.uci.edu/2751 Sonar-Qube: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/0d7974f2 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/0d7974f2 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/0d7974f2 Branch: refs/heads/master Commit: 0d7974f27d6d922e597a3cfce52dd6f856ea2ac6 Parents: 2fff15a Author: Ali Alsuliman Authored: Thu Jul 12 10:42:48 2018 -0700 Committer: abdullah alamoudi Committed: Thu Jul 12 23:42:11 2018 -0700 -- .../org/apache/asterix/runtime/ExceptionIT.java | 9 +- .../apache/asterix/runtime/NullMissingTest.java | 8 +- .../array_append/array_append.3.query.sqlpp | 13 +- .../array_insert/array_insert.1.ddl.sqlpp | 46 .../array_insert/array_insert.2.update.sqlpp| 22 ++ .../array_insert/array_insert.3.query.sqlpp | 43 .../array_insert/array_insert.4.ddl.sqlpp | 20 ++ .../array_prepend/array_prepend.1.ddl.sqlpp | 56 + .../array_prepend/array_prepend.2.update.sqlpp | 27 +++ .../array_prepend/array_prepend.3.query.sqlpp | 32 +++ .../array_prepend/array_prepend.4.ddl.sqlpp | 20 ++ .../array_fun/array_put/array_put.1.ddl.sqlpp | 56 + .../array_put/array_put.2.update.sqlpp | 27 +++ .../array_fun/array_put/array_put.3.query.sqlpp | 33 +++ .../array_fun/array_put/array_put.4.query.sqlpp | 22 ++ .../array_fun/array_put/array_put.5.query.sqlpp | 22 ++ .../array_fun/array_put/array_put.6.ddl.sqlpp | 20 ++ .../array_remove/array_remove.1.ddl.sqlpp | 56 + .../array_remove/array_remove.2.update.sqlpp| 27 +++ .../array_remove/array_remove.3.query.sqlpp | 32 +++ .../array_remove/array_remove.4.query.sqlpp | 22 ++ .../array_remove/array_remove.5.query.sqlpp | 22 ++ .../array_remove/array_remove.6.ddl.sqlpp | 20 ++ .../array_fun/array_append/array_append.3.adm | 2 +- .../array_fun/array_insert/array_insert.3.adm | 1 + .../array_fun/array_prepend/array_prepend.3.adm | 1 + .../results/array_fun/array_put/array_put.3.adm | 1 + .../array_fun/array_remove/array_remove.3.adm | 1 + .../resources/runtimets/testsuite_sqlpp.xml | 24 +++ .../asterix/om/functions/BuiltinFunctions.java | 18 +- .../impl/AListFirstTypeComputer.java| 50 + .../om/typecomputer/impl/AListTypeComputer.java | 59 +- .../impl/ArrayAppendTypeComputer.java | 54 - .../asterix/om/typecomputer/ExceptionTest.java | 11 +- .../om/typecomputer/TypeComputerTest.java | 26 ++- .../functions/AbstractArrayAddRemoveEval.java | 209 +++ .../functions/ArrayAppendDescriptor.java| 105 ++ .../functions/ArrayInsertDescriptor.java| 129 .../functions/ArrayPrependDescriptor.java | 90 .../functions/ArrayPutDescriptor.java | 136 .../functions/ArrayRemoveDescriptor.java| 123 +++ .../evaluators/functions/CastTypeEvaluator.java | 15 +- .../evaluators/functions/PointableHelper.java | 6 +- .../runtime/functions/FunctionCollection.java | 10 +- 44 files changed, 1529 insertions(+), 197 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0d7974f2/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java index e764c32..2e7445f 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java @@ -50,9 +50,8 @@ public class ExceptionIT { String className = func.getClass().getName(); // We test all generated functions except // record and cast functions, which requires type settings. -String[] splits = className.split("\\."); -if (className.contains("Gen") && !className.contains("record") && !className.contains("Cast") -&& !splits[splits.length - 1].startsWith("Array")) { +if
asterixdb git commit: [NO ISSUE][ING] Set state to stop on failure of recovery
Repository: asterixdb Updated Branches: refs/heads/master 30ab3cac8 -> 2fff15a89 [NO ISSUE][ING] Set state to stop on failure of recovery - user model changes: no - storage format changes: no - interface changes: no Details: - Before this change, if a rebalance comes at the time when an active recovery retry policy decides to give up, then the recovery task would finish while the entity is in the suspended state. When the rebalance completes, the resume will set the entity back to the temp failure state but recovery has given up already. - To fix this, recovery task doesn't return in case of suspend and wait for the resume call to set the state to stopped. Change-Id: I5a60a4f547a5b7f2c4c5199d48bcc83f5a2e9ccd Reviewed-on: https://asterix-gerrit.ics.uci.edu/2757 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/2fff15a8 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/2fff15a8 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/2fff15a8 Branch: refs/heads/master Commit: 2fff15a89807ef66db01f310e950412786e5162b Parents: 30ab3ca Author: Abdullah Alamoudi Authored: Thu Jul 12 15:12:46 2018 -0700 Committer: abdullah alamoudi Committed: Thu Jul 12 21:19:36 2018 -0700 -- .../main/java/org/apache/asterix/app/active/RecoveryTask.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2fff15a8/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java index 9531b63..5d722e7 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java @@ -154,7 +154,12 @@ public class RecoveryTask { // Recovery task is essntially over now either through failure or through cancellation(stop) synchronized (listener) { listener.notifyAll(); -if (listener.getState() != ActivityState.TEMPORARILY_FAILED) { +if (listener.getState() != ActivityState.TEMPORARILY_FAILED +// Suspend can happen at the same time, the recovery policy decides to stop... in that case, we +// must still do two things: +// 1. set the state to permanent failure. +// 2. set the entity to not running to avoid auto recovery attempt +&& listener.getState() != ActivityState.SUSPENDED) { return null; } }
asterixdb git commit: [NO ISSUE][ING] Cleanup active listener
Repository: asterixdb Updated Branches: refs/heads/master bdbb5a36b -> 9a1b8b753 [NO ISSUE][ING] Cleanup active listener - user model changes: no - storage format changes: no - interface changes: no Details: - Merge STOPPED and PERMANENT_FAILURE into a single state since they are equivalent. - Allow timeout of start and stop of active entities. - Add test cases for timeout scenarios. - Refactor common code into the abstract listener class. Change-Id: I7f3b14aec46728fbe8b256b915d0e30992b2fe47 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2618 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/9a1b8b75 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/9a1b8b75 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/9a1b8b75 Branch: refs/heads/master Commit: 9a1b8b753d6e35c8906cada71e22d6893a52af5c Parents: bdbb5a3 Author: Abdullah Alamoudi Authored: Tue Jul 10 10:35:04 2018 -0700 Committer: abdullah alamoudi Committed: Thu Jul 12 14:14:12 2018 -0700 -- .../apache/asterix/active/ActivityState.java| 9 +- .../active/IActiveEntityEventSubscriber.java| 4 +- .../active/IActiveEntityEventsListener.java | 4 +- .../app/active/ActiveEntityEventsListener.java | 196 ++- .../asterix/app/active/FeedEventsListener.java | 68 +++ .../apache/asterix/app/active/RecoveryTask.java | 4 +- .../apache/asterix/utils/FeedOperations.java| 19 -- .../test/active/ActiveEventsListenerTest.java | 101 +++--- .../test/active/DummyFeedEventsListener.java| 7 +- .../asterix/test/active/TestEventsListener.java | 113 ++- .../external/feed/watch/AbstractSubscriber.java | 13 ++ .../external/feed/watch/NoOpSubscriber.java | 3 +- .../external/feed/watch/StatsSubscriber.java| 16 +- .../feed/watch/WaitForStateSubscriber.java | 21 +- .../java/org/apache/hyracks/util/ExitUtil.java | 1 + 15 files changed, 346 insertions(+), 233 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a1b8b75/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActivityState.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActivityState.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActivityState.java index eb43d10..1f3daac 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActivityState.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActivityState.java @@ -24,11 +24,6 @@ public enum ActivityState { */ STOPPED, /** - * Failure to recover from a temporary faliure caused the activity to fail permanantly. - * No further recovery attempts will be made. - */ -PERMANENTLY_FAILED, -/** * An unexpected failure caused the activity to fail but recovery attempts will start taking place */ TEMPORARILY_FAILED, @@ -41,6 +36,10 @@ public enum ActivityState { */ STARTING, /** + * The activity was started but is being cancelled. Waiting for the job cancellation to complete + */ +CANCELLING, +/** * The activity has been started successfully and is running */ RUNNING, http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a1b8b75/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveEntityEventSubscriber.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveEntityEventSubscriber.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveEntityEventSubscriber.java index 142e84b..e01d0a7 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveEntityEventSubscriber.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveEntityEventSubscriber.java @@ -31,7 +31,7 @@ public interface IActiveEntityEventSubscriber { * @param event * @throws HyracksDataException */ -void notify(ActiveEvent event) throws HyracksDataException; +void notify(ActiveEvent event); /** * Checkcs whether the subscriber is done receiving events @@ -53,5 +53,5 @@ public interface IActiveEntityEventSubscriber { * @param eventsListener * @throws HyracksDataException */ -void subscribed(IActiveEntityEventsListener eventsListener) throws HyracksDataException; +void subscribed(IActiveEntityEventsListener eventsListener); }
asterixdb-bad git commit: Remove unneeded throws declaration
Repository: asterixdb-bad Updated Branches: refs/heads/master 7da30159b -> 5364a835c Remove unneeded throws declaration Change-Id: I20a6effa1f01658ec973f85cb7be1e4ccbd7fc1b Project: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/commit/5364a835 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/tree/5364a835 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb-bad/diff/5364a835 Branch: refs/heads/master Commit: 5364a835c798148c96b289b78dada87669054c7f Parents: 7da3015 Author: Abdullah Alamoudi Authored: Tue Jul 10 10:37:29 2018 -0700 Committer: Abdullah Alamoudi Committed: Tue Jul 10 10:37:29 2018 -0700 -- .../apache/asterix/bad/metadata/DeployedJobSpecEventListener.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb-bad/blob/5364a835/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/DeployedJobSpecEventListener.java -- diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/DeployedJobSpecEventListener.java b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/DeployedJobSpecEventListener.java index 4598d71..3ec2c43 100644 --- a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/DeployedJobSpecEventListener.java +++ b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/DeployedJobSpecEventListener.java @@ -110,7 +110,6 @@ public class DeployedJobSpecEventListener implements IActiveEntityEventsListener this.executorService = ses; } - public ScheduledExecutorService getExecutorService() { return executorService; } @@ -192,7 +191,7 @@ public class DeployedJobSpecEventListener implements IActiveEntityEventsListener } @Override -public synchronized void subscribe(IActiveEntityEventSubscriber subscriber) throws HyracksDataException { +public synchronized void subscribe(IActiveEntityEventSubscriber subscriber) { // no op }
[1/2] asterixdb git commit: [NO ISSUE]Introduce convenience methods for pointables
Repository: asterixdb Updated Branches: refs/heads/master ac3a16a5e -> 5ff3230e7 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5ff3230e/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java index 8500842..5492919 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java @@ -35,6 +35,9 @@ public class ExitUtil { public static final int EC_FAILED_TO_RECOVER = 3; public static final int EC_NC_FAILED_TO_ABORT_ALL_PREVIOUS_TASKS = 4; public static final int EC_FAILED_TO_PROCESS_UN_INTERRUPTIBLE_REQUEST = 5; +public static final int EC_FAILED_TO_COMMIT_METADATA_TXN = 6; +public static final int EC_FAILED_TO_ABORT_METADATA_TXN = 7; +public static final int EC_INCONSISTENT_METADATA = 8; public static final int EC_UNHANDLED_EXCEPTION = 11; public static final int EC_IMMEDIATE_HALT = 33; public static final int EC_HALT_ABNORMAL_RESERVED_44 = 44; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5ff3230e/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java index 1863b28..e6e21fa 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java @@ -88,7 +88,7 @@ public class NetworkUtil { } public static InetSocketAddress toInetSocketAddress(String maybeLiteralHost, int port) { -return InetSocketAddress.createUnresolved(decodeIPv6LiteralHost(maybeLiteralHost), port); +return new InetSocketAddress(decodeIPv6LiteralHost(maybeLiteralHost), port); } public static List parseInetSocketAddresses(String... hostPortStrings) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5ff3230e/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java index cdb82bb..5597058 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java @@ -294,6 +294,11 @@ public class UTF8StringUtil { return hash(bytes, start, length, true, false, 31, Integer.MAX_VALUE); } +public static String toString(byte[] bytes, int start) { +StringBuilder builder = new StringBuilder(); +return toString(builder, bytes, start).toString(); +} + public static StringBuilder toString(StringBuilder builder, byte[] bytes, int start) { int utfLen = getUTFLength(bytes, start); int offset = getNumBytesToStoreLength(utfLen); @@ -650,10 +655,10 @@ public class UTF8StringUtil { if (writer == null) { tempBytes = new byte[utflen + 5]; } else { -if (writer.tempBytes == null || writer.tempBytes.length < utflen + 5) { -writer.tempBytes = new byte[utflen + 5]; +if (writer.getTempBytes() == null || writer.getTempBytes().length < utflen + 5) { +writer.setTempBytes(new byte[utflen + 5]); } -tempBytes = writer.tempBytes; +tempBytes = writer.getTempBytes(); } return tempBytes; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5ff3230e/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java index 485bd7d..3d9a7c5 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java +++
[2/2] asterixdb git commit: [NO ISSUE]Introduce convenience methods for pointables
port org.apache.asterix.common.transactions.ITransactionContext; import org.apache.asterix.common.transactions.ITransactionManager.AtomicityLevel; import org.apache.asterix.common.transactions.ITransactionSubsystem; import org.apache.asterix.common.transactions.ITxnIdFactory; -import org.apache.asterix.common.transactions.ImmutableDatasetId; import org.apache.asterix.common.transactions.TransactionOptions; import org.apache.asterix.common.transactions.TxnId; import org.apache.asterix.common.utils.StoragePathUtil; @@ -124,10 +121,13 @@ import org.apache.hyracks.storage.common.IIndexAccessor; import org.apache.hyracks.storage.common.IIndexCursor; import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.MultiComparator; +import org.apache.hyracks.util.ExitUtil; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class MetadataNode implements IMetadataNode { private static final long serialVersionUID = 1L; - +private static final Logger LOGGER = LogManager.getLogger(); // shared between core and extension private IDatasetLifecycleManager datasetLifecycleManager; private ITransactionSubsystem transactionSubsystem; @@ -172,14 +172,28 @@ public class MetadataNode implements IMetadataNode { transactionSubsystem.getTransactionManager().beginTransaction(transactionId, options); } +@SuppressWarnings("squid:S1181") @Override public void commitTransaction(TxnId txnId) throws RemoteException, ACIDException { -transactionSubsystem.getTransactionManager().commitTransaction(txnId); +try { + transactionSubsystem.getTransactionManager().commitTransaction(txnId); +} catch (Throwable th) { +// Metadata node should abort all Metadata transactions on re-start +LOGGER.fatal("Failure committing a metadata transaction", th); +ExitUtil.halt(ExitUtil.EC_FAILED_TO_COMMIT_METADATA_TXN); +} } +@SuppressWarnings("squid:S1181") @Override public void abortTransaction(TxnId txnId) throws RemoteException, ACIDException { -transactionSubsystem.getTransactionManager().abortTransaction(txnId); +try { + transactionSubsystem.getTransactionManager().abortTransaction(txnId); +} catch (Throwable th) { +// Metadata node should abort all uncommitted transactions on re-start +LOGGER.fatal("Failure committing a metadata transaction", th); +ExitUtil.halt(ExitUtil.EC_FAILED_TO_ABORT_METADATA_TXN); +} } // TODO(amoudi): make all metadata operations go through the generic methods http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5ff3230e/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java -- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java index bcd05ee..d0a22b7 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java @@ -127,9 +127,6 @@ public class Dataset implements IMetadataEntity, IDataset { */ private static final long serialVersionUID = 1L; private static final Logger LOGGER = LogManager.getLogger(); -//TODO: Remove Singletons -private static final BTreeResourceFactoryProvider bTreeResourceFactoryProvider = -BTreeResourceFactoryProvider.INSTANCE; private static final RTreeResourceFactoryProvider rTreeResourceFactoryProvider = RTreeResourceFactoryProvider.INSTANCE; private static final InvertedIndexResourceFactoryProvider invertedIndexResourceFactoryProvider = @@ -153,10 +150,6 @@ public class Dataset implements IMetadataEntity, IDataset { private final long rebalanceCount; private int pendingOp; -/* - * Transient (For caching) - */ - public Dataset(String dataverseName, String datasetName, String recordTypeDataverseName, String recordTypeName, String nodeGroupName, String compactionPolicy, Map compactionPolicyProperties, IDatasetDetails datasetDetails, Map hints, DatasetType datasetType, int datasetId, @@ -473,8 +466,9 @@ public class Dataset implements IMetadataEntity, IDataset { IResourceFactory resourceFactory; switch (index.getIndexType()) { case BTREE: -resourceFactory = bTreeResourceFactoryProvider.getResourceFactory(mdProvider, this, index, recordType, -metaType, mergePolicyFactory, mergePolicyProperties, filterTypeTraits, filterCmpFactories); +resourceFacto
asterixdb git commit: [NO ISSUE] Improve Span
Repository: asterixdb Updated Branches: refs/heads/master d8ed19620 -> 99e4d2644 [NO ISSUE] Improve Span Change-Id: I4378332af6b18720f5abc60259bb9af81f22219b Reviewed-on: https://asterix-gerrit.ics.uci.edu/2694 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/99e4d264 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/99e4d264 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/99e4d264 Branch: refs/heads/master Commit: 99e4d26441ad512a087194fd723edddf646dfee0 Parents: d8ed196 Author: Abdullah Alamoudi Authored: Sun Jun 10 04:39:17 2018 -0700 Committer: abdullah alamoudi Committed: Mon Jun 11 22:32:38 2018 -0700 -- asterixdb/asterix-active/pom.xml| 4 ++ .../apache/asterix/active/CountRetryPolicy.java | 39 --- .../asterix/active/CountRetryPolicyFactory.java | 3 ++ .../org/apache/asterix/active/IRetryPolicy.java | 29 --- .../asterix/active/IRetryPolicyFactory.java | 2 + .../asterix/active/InfiniteRetryPolicy.java | 2 + .../active/InfiniteRetryPolicyFactory.java | 2 + .../asterix/active/NoRetryPolicyFactory.java| 6 ++- .../apache/asterix/app/active/RecoveryTask.java | 2 +- .../org/apache/hyracks/api/util/InvokeUtil.java | 32 +++- .../apache/hyracks/util/ComputingAction.java| 24 + .../apache/hyracks/util/CountRetryPolicy.java | 39 +++ .../java/org/apache/hyracks/util/IDelay.java| 26 ++ .../org/apache/hyracks/util/IRetryPolicy.java | 29 +++ .../org/apache/hyracks/util/NoRetryPolicy.java | 32 .../main/java/org/apache/hyracks/util/Span.java | 51 +++- 16 files changed, 248 insertions(+), 74 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/99e4d264/asterixdb/asterix-active/pom.xml -- diff --git a/asterixdb/asterix-active/pom.xml b/asterixdb/asterix-active/pom.xml index a6f6a38..922a0e8 100644 --- a/asterixdb/asterix-active/pom.xml +++ b/asterixdb/asterix-active/pom.xml @@ -35,6 +35,10 @@ org.apache.hyracks + hyracks-util + + + org.apache.hyracks hyracks-api http://git-wip-us.apache.org/repos/asf/asterixdb/blob/99e4d264/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java deleted file mode 100644 index b964430..000 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.active; - -public class CountRetryPolicy implements IRetryPolicy { - -private final int count; -private int attempted = 0; - -public CountRetryPolicy(int count) { -this.count = count; -} - -@Override -public boolean retry(Throwable failure) { -if (attempted < count) { -attempted++; -return true; -} -return false; -} - -} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/99e4d264/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicyFactory.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicyFactory.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicyFactory.java index 5e26ae4..477bb5a 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicyFactory.java +++
asterixdb git commit: [NO ISSUE][ING] Improvements to active retry policy
Repository: asterixdb Updated Branches: refs/heads/master 5c28118b5 -> 7c7ce10f5 [NO ISSUE][ING] Improvements to active retry policy - user model changes: no - storage format changes: no - interface changes: yes - IRetryPolicy.retry now takes a Throwable parameter Details: - This change improves the retry policy for active entities by providing the failure causing the last failure. - The change also removes the lock over the active notification handler on the recover call. Change-Id: I4246e2a276e1f80569a07630e182aab8f49dd115 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2665 Reviewed-by: Michael Blow Contrib: Michael Blow Integration-Tests: Michael Blow Tested-by: Michael Blow Contrib: Jenkins Tested-by: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7c7ce10f Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7c7ce10f Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7c7ce10f Branch: refs/heads/master Commit: 7c7ce10f563dd23af8079d836dda17b77a9a2729 Parents: 5c28118 Author: Abdullah Alamoudi Authored: Wed Jun 6 21:09:52 2018 +0300 Committer: abdullah alamoudi Committed: Wed Jun 6 14:19:42 2018 -0700 -- .../apache/asterix/active/CountRetryPolicy.java | 2 +- .../org/apache/asterix/active/IRetryPolicy.java | 4 +- .../asterix/active/InfiniteRetryPolicy.java | 2 +- .../asterix/active/NoRetryPolicyFactory.java| 2 +- .../app/active/ActiveNotificationHandler.java | 4 +- .../apache/asterix/app/active/RecoveryTask.java | 5 +- .../lang/common/util/LangRecordParseUtil.java | 2 + .../hyracks/api/client/HyracksConnection.java | 80 +--- .../nc/work/EnsureAllCcTasksCompleted.java | 4 +- .../java/org/apache/hyracks/util/ExitUtil.java | 6 +- 10 files changed, 70 insertions(+), 41 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7c7ce10f/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java index 6633810..b964430 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/CountRetryPolicy.java @@ -28,7 +28,7 @@ public class CountRetryPolicy implements IRetryPolicy { } @Override -public boolean retry() { +public boolean retry(Throwable failure) { if (attempted < count) { attempted++; return true; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7c7ce10f/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IRetryPolicy.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IRetryPolicy.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IRetryPolicy.java index a010984..1daf07e 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IRetryPolicy.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IRetryPolicy.java @@ -21,7 +21,9 @@ package org.apache.asterix.active; @FunctionalInterface public interface IRetryPolicy { /** + * @param failure + *the cause of the active entity failure * @return true if one more attempt should be done */ -boolean retry(); +boolean retry(Throwable failure); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7c7ce10f/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/InfiniteRetryPolicy.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/InfiniteRetryPolicy.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/InfiniteRetryPolicy.java index 074f8f4..fde67e6 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/InfiniteRetryPolicy.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/InfiniteRetryPolicy.java @@ -27,7 +27,7 @@ public class InfiniteRetryPolicy implements IRetryPolicy { } @Override -public boolean retry() { +public boolean retry(Throwable failure) { synchronized (listener) { try { listener.wait(5000); //NOSONAR this method is being called in a while loop
[1/2] asterixdb git commit: [NO ISSUE][TEST] Use reflection in ADMDataParserTest
Repository: asterixdb Updated Branches: refs/heads/master 5c26b4258 -> b54f9bffa [NO ISSUE][TEST] Use reflection in ADMDataParserTest Change-Id: I1f88684693230156f27327882f65f05ea3105a8e Reviewed-on: https://asterix-gerrit.ics.uci.edu/2685 Sonar-Qube: Jenkins Tested-by: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/2a182c49 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/2a182c49 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/2a182c49 Branch: refs/heads/master Commit: 2a182c495d311757f1aa9291ca407c8068f00ff2 Parents: e2a536e Author: Abdullah Alamoudi Authored: Sun Jun 3 03:19:00 2018 +0300 Committer: Michael Blow Committed: Sun Jun 3 11:23:40 2018 -0700 -- .../external/parser/test/ADMDataParserTest.java | 45 ++-- 1 file changed, 32 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2a182c49/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/ADMDataParserTest.java -- diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/ADMDataParserTest.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/ADMDataParserTest.java index f06528e..1485f4f 100644 --- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/ADMDataParserTest.java +++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/ADMDataParserTest.java @@ -22,21 +22,22 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutput; import java.io.DataOutputStream; import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicInteger; import org.apache.asterix.external.parser.ADMDataParser; +import org.apache.asterix.external.parser.AbstractDataParser; import org.apache.asterix.om.base.AMutableDate; import org.apache.asterix.om.base.AMutableDateTime; import org.apache.asterix.om.base.AMutableTime; import org.junit.Assert; import org.junit.Test; -import junit.extensions.PA; - public class ADMDataParserTest { @Test -public void test() throws IOException { +public void test() throws IOException, NoSuchMethodException, SecurityException, NoSuchFieldException { String[] dates = { "-9537-08-04", "9656-06-03", "-9537-04-04", "9656-06-04", "-9537-10-04", "9626-09-05" }; AMutableDate[] parsedDates = new AMutableDate[] { new AMutableDate(-4202630), new AMutableDate(2807408), new AMutableDate(-4202752), @@ -55,6 +56,27 @@ public class ADMDataParserTest { new AMutableDateTime(-45286270768513L), new AMutableDateTime(151729886421653L), new AMutableDateTime(5047449515758L), new AMutableDateTime(210721439419691L) }; +Method parseDateMethod = +AbstractDataParser.class.getDeclaredMethod("parseDate", String.class, DataOutput.class); +parseDateMethod.setAccessible(true); + +Field aDateField = AbstractDataParser.class.getDeclaredField("aDate"); +aDateField.setAccessible(true); + +Method parseTimeMethod = +AbstractDataParser.class.getDeclaredMethod("parseTime", String.class, DataOutput.class); +parseTimeMethod.setAccessible(true); + +Field aTimeField = AbstractDataParser.class.getDeclaredField("aTime"); +aTimeField.setAccessible(true); + +Method parseDateTimeMethod = +AbstractDataParser.class.getDeclaredMethod("parseDateTime", String.class, DataOutput.class); +parseDateTimeMethod.setAccessible(true); + +Field aDateTimeField = AbstractDataParser.class.getDeclaredField("aDateTime"); +aDateTimeField.setAccessible(true); + Thread[] threads = new Thread[16]; AtomicInteger errorCount = new AtomicInteger(0); for (int i = 0; i < threads.length; ++i) { @@ -70,25 +92,22 @@ public class ADMDataParserTest { while (round++ < 1) { // Test parseDate. for (int index = 0; index < dates.length; ++index) { -PA.invokeMethod(parser, "parseDate(java.lang.String, java.io.DataOutput)", dates[index], -dos); -AMutableDate aDate = (AMutableDate) PA.getValue(parser, "aDate"); +parseDateMethod.invoke(parser, dates[index], dos); +AMutableDate aDate = (AMutableDate)
asterixdb git commit: [NO ISSUE][ING] Allow Readers to add their own stats
Repository: asterixdb Updated Branches: refs/heads/master bc7e16e05 -> dbae78f5a [NO ISSUE][ING] Allow Readers to add their own stats - user model changes: no - storage format changes: no - interface changes: yes - Add IRecordReader.getStats() Details: - Allow record reader to contribute their own stats. Change-Id: Ib064bd97b33f2d9da330bac3a49bd4c6831faaca Reviewed-on: https://asterix-gerrit.ics.uci.edu/2642 Sonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/dbae78f5 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/dbae78f5 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/dbae78f5 Branch: refs/heads/master Commit: dbae78f5a0a412bb95158627b2fe7e17488b233c Parents: bc7e16e Author: Abdullah Alamoudi Authored: Thu May 31 23:47:00 2018 +0300 Committer: abdullah alamoudi Committed: Fri Jun 1 01:23:34 2018 -0700 -- .../active/ActiveSourceOperatorNodePushable.java | 4 +++- .../org/apache/asterix/external/api/IRecordReader.java | 7 +++ .../dataflow/FeedRecordDataFlowController.java | 13 +++-- 3 files changed, 21 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/dbae78f5/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveSourceOperatorNodePushable.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveSourceOperatorNodePushable.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveSourceOperatorNodePushable.java index 1df9020..2f30df4 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveSourceOperatorNodePushable.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveSourceOperatorNodePushable.java @@ -63,8 +63,10 @@ public abstract class ActiveSourceOperatorNodePushable extends AbstractUnaryOutp @Override public final void stop() throws HyracksDataException, InterruptedException { -abort(); synchronized (this) { +if (!done) { +abort(); +} while (!done) { wait(); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/dbae78f5/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java index 08ffe18..9033814 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java @@ -77,4 +77,11 @@ public interface IRecordReader extends Closeable { public default IFeedMarker getProgressReporter() { return null; } + +/** + * @return JSON String containing ingestion stats + */ +default String getStats() { +return null; +} } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/dbae78f5/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java index 164ff68..f392139 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java @@ -40,6 +40,7 @@ import org.apache.logging.log4j.Logger; public class FeedRecordDataFlowController extends AbstractFeedDataFlowController { public static final String INCOMING_RECORDS_COUNT_FIELD_NAME = "incoming-records-count"; public static final String FAILED_AT_PARSER_RECORDS_COUNT_FIELD_NAME = "failed-at-parser-records-count"; +public static final String READER_STATS_FIELD_NAME = "reader-stats"; public enum State { CREATED, @@ -257,7 +258,15 @@ public class FeedRecordDataFlowController extends AbstractFeedDataFlowControl @Override public String getStats() { -return "{\"" + INCOMING_RECORDS_COUNT_FIELD_NAME + "\": " +
asterixdb git commit: [NO ISSUE][RT] Make start and cancel job uninterruptible
Repository: asterixdb Updated Branches: refs/heads/master 8eb7413b7 -> 1102ed587 [NO ISSUE][RT] Make start and cancel job uninterruptible - user model changes: no - storage format changes: no - interface changes: no Details: - Previously, a Hyracks data connection that starts a job might be interrupted before it receives the job id. This would leak resources since that job will run even though, no one is going to read its result. - Similarly, job cancellation can be interrupted and so the job which was meant to be cancelled will continue running. - To avoid this, a new thread is added to Hyracks Client Connection which takes care of starting and cancelling of jobs. The thread submitting these requests will be un-interruptible until those calls return. Change-Id: I27b2aaae902b19829bd2df2ae04c5e704f5ca8e8 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2639 Tested-by: JenkinsContrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/1102ed58 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/1102ed58 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/1102ed58 Branch: refs/heads/master Commit: 1102ed587d81b88bd2c6c8e012ccda5be47c2350 Parents: 8eb7413 Author: Abdullah Alamoudi Authored: Fri May 25 00:21:43 2018 +0300 Committer: abdullah alamoudi Committed: Sun May 27 18:51:45 2018 -0700 -- .../external/indexing/IndexingScheduler.java| 9 +- .../apache/asterix/external/util/HDFSUtils.java | 7 +- .../hyracks/api/client/HyracksConnection.java | 196 ++- .../java/org/apache/hyracks/util/ExitUtil.java | 1 + 4 files changed, 197 insertions(+), 16 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1102ed58/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/IndexingScheduler.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/IndexingScheduler.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/IndexingScheduler.java index edac0fa..f22693a 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/IndexingScheduler.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/IndexingScheduler.java @@ -33,8 +33,6 @@ import java.util.Random; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapred.InputSplit; -import org.apache.hyracks.api.client.HyracksConnection; -import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.client.NodeControllerInfo; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.exceptions.HyracksException; @@ -53,19 +51,14 @@ public class IndexingScheduler { /** a map from the NC name to the index */ private Map ncNameToIndex = new HashMap (); -/** a map from NC name to the NodeControllerInfo */ -private Map ncNameToNcInfos; - /** * The constructor of the scheduler. * * @param ncNameToNcInfos * @throws HyracksException */ -public IndexingScheduler(String ipAddress, int port) throws HyracksException { +public IndexingScheduler(Map ncNameToNcInfos) throws HyracksException { try { -IHyracksClientConnection hcc = new HyracksConnection(ipAddress, port); -this.ncNameToNcInfos = hcc.getNodeControllerInfos(); loadIPAddressToNCMap(ncNameToNcInfos); } catch (Exception e) { throw HyracksException.create(e); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/1102ed58/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/HDFSUtils.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/HDFSUtils.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/HDFSUtils.java index bd50352..1b13ec5 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/HDFSUtils.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/HDFSUtils.java @@ -46,6 +46,7 @@ import org.apache.hadoop.mapred.SequenceFileInputFormat;
asterixdb git commit: [NO ISSUE][STO] Improve logging when failing to schedule a flush
Repository: asterixdb Updated Branches: refs/heads/master af17baa7d -> 8eb7413b7 [NO ISSUE][STO] Improve logging when failing to schedule a flush - user model changes: no - storage format changes: no - interface changes: no Details: - Log partition info when failing to schedule a flush operation. - Fix isCurrentMutableComponentEmpty() to consider the UNREADABLE_UNWRITABLE state. Change-Id: I9bbc0be36633b896becc16d3eeddeef980db5802 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2662 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8eb7413b Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8eb7413b Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8eb7413b Branch: refs/heads/master Commit: 8eb7413b7b65f78e2687d3f07bc3d0fac7db4863 Parents: af17baa Author: Abdullah Alamoudi Authored: Mon May 28 01:35:39 2018 +0300 Committer: abdullah alamoudi Committed: Sun May 27 18:50:37 2018 -0700 -- .../context/PrimaryIndexOperationTracker.java | 21 +--- .../am/lsm/common/impls/AbstractLSMIndex.java | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8eb7413b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java index 52c8962..0aa0d2b 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java @@ -51,8 +51,11 @@ import org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation; import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentId; import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class PrimaryIndexOperationTracker extends BaseOperationTracker implements IoOperationCompleteListener { +private static final Logger LOGGER = LogManager.getLogger(); private final int partition; // Number of active operations on an ILSMIndex instance. private final AtomicInteger numActiveOperations; @@ -113,23 +116,34 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker implement } } +ILSMIndex primaryLsmIndex = null; if (needsFlush || flushOnExit) { flushOnExit = false; // make the current mutable components READABLE_UNWRITABLE to stop coming modify operations from entering // them until the current flush is scheduled. LSMComponentId primaryId = null; //Double check that the primary index has been modified + synchronized (this) { if (numActiveOperations.get() > 0) { throw new IllegalStateException( "Can't request a flush on an index with active operations: " + numActiveOperations.get()); } for (ILSMIndex lsmIndex : indexes) { -if (lsmIndex.isPrimaryIndex() && lsmIndex.isCurrentMutableComponentEmpty()) { -return; +if (lsmIndex.isPrimaryIndex()) { +if (lsmIndex.isCurrentMutableComponentEmpty()) { +LOGGER.info("Primary index on dataset {} and partition {} is empty... skipping flush"); +return; +} +primaryLsmIndex = lsmIndex; +break; } } } +if (primaryLsmIndex == null) { +throw new IllegalStateException( +"Primary index not found in dataset " + dsInfo.getDatasetID() + " and partition " + partition); +} for (ILSMIndex lsmIndex : indexes) { ILSMOperationTracker opTracker = lsmIndex.getOperationTracker(); synchronized (opTracker) { @@ -148,7
[3/5] asterixdb git commit: [NO ISSUE][STO] Misc Storage Fixes and Improvements
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/10a3f21d/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java index 681669f..52c8962 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java @@ -19,7 +19,10 @@ package org.apache.asterix.common.context; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; @@ -37,16 +40,19 @@ import org.apache.hyracks.storage.am.common.impls.NoOpOperationCallback; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent.ComponentState; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentId; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentIdGenerator; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor; import org.apache.hyracks.storage.am.lsm.common.api.ILSMMemoryComponent; import org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTracker; +import org.apache.hyracks.storage.am.lsm.common.api.IoOperationCompleteListener; import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType; +import org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation; import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentId; import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; -public class PrimaryIndexOperationTracker extends BaseOperationTracker { +public class PrimaryIndexOperationTracker extends BaseOperationTracker implements IoOperationCompleteListener { private final int partition; // Number of active operations on an ILSMIndex instance. private final AtomicInteger numActiveOperations; @@ -54,6 +60,7 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { private final ILSMComponentIdGenerator idGenerator; private boolean flushOnExit = false; private boolean flushLogCreated = false; +private final MapscheduledFlushes = new HashMap<>(); public PrimaryIndexOperationTracker(int datasetID, int partition, ILogManager logManager, DatasetInfo dsInfo, ILSMComponentIdGenerator idGenerator) { @@ -107,6 +114,7 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { } if (needsFlush || flushOnExit) { +flushOnExit = false; // make the current mutable components READABLE_UNWRITABLE to stop coming modify operations from entering // them until the current flush is scheduled. LSMComponentId primaryId = null; @@ -143,7 +151,6 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { throw new IllegalStateException("Primary index not found in dataset " + dsInfo.getDatasetID()); } LogRecord logRecord = new LogRecord(); -flushOnExit = false; if (dsInfo.isDurable()) { /* * Generate a FLUSH log. @@ -182,16 +189,36 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { Map flushMap = new HashMap<>(); flushMap.put(LSMIOOperationCallback.KEY_FLUSH_LOG_LSN, flushLsn); flushMap.put(LSMIOOperationCallback.KEY_NEXT_COMPONENT_ID, nextComponentId); -for (ILSMIndex lsmIndex : dsInfo.getDatasetPartitionOpenIndexes(partition)) { -ILSMIndexAccessor accessor = lsmIndex.createAccessor(NoOpIndexAccessParameters.INSTANCE); -accessor.getOpContext().setParameters(flushMap); -accessor.scheduleFlush(); +synchronized (scheduledFlushes) { +for (ILSMIndex lsmIndex : dsInfo.getDatasetPartitionOpenIndexes(partition)) { +ILSMIndexAccessor accessor = lsmIndex.createAccessor(NoOpIndexAccessParameters.INSTANCE); +accessor.getOpContext().setParameters(flushMap); +ILSMIOOperation flush = accessor.scheduleFlush(); +scheduledFlushes.put(flush.getTarget().getRelativePath(), (FlushOperation) flush); +flush.addCompleteListener(this); +}
[4/5] asterixdb git commit: [NO ISSUE][STO] Misc Storage Fixes and Improvements
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/10a3f21d/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java new file mode 100644 index 000..a0ed26e --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java @@ -0,0 +1,577 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.dataflow; + +import java.io.File; +import java.lang.reflect.Field; +import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.apache.asterix.app.bootstrap.TestNodeController; +import org.apache.asterix.app.bootstrap.TestNodeController.PrimaryIndexInfo; +import org.apache.asterix.app.bootstrap.TestNodeController.SecondaryIndexInfo; +import org.apache.asterix.app.data.gen.RecordTupleGenerator; +import org.apache.asterix.app.data.gen.RecordTupleGenerator.GenerationFunction; +import org.apache.asterix.app.nc.NCAppRuntimeContext; +import org.apache.asterix.common.api.IDatasetLifecycleManager; +import org.apache.asterix.common.config.DatasetConfig.DatasetType; +import org.apache.asterix.common.config.DatasetConfig.IndexType; +import org.apache.asterix.common.dataflow.LSMInsertDeleteOperatorNodePushable; +import org.apache.asterix.common.exceptions.ACIDException; +import org.apache.asterix.common.storage.IIndexCheckpointManager; +import org.apache.asterix.common.storage.IIndexCheckpointManagerProvider; +import org.apache.asterix.common.storage.IndexCheckpoint; +import org.apache.asterix.common.storage.ResourceReference; +import org.apache.asterix.common.transactions.ITransactionContext; +import org.apache.asterix.common.transactions.ITransactionManager; +import org.apache.asterix.common.transactions.TransactionOptions; +import org.apache.asterix.external.util.DataflowUtils; +import org.apache.asterix.file.StorageComponentProvider; +import org.apache.asterix.metadata.entities.Dataset; +import org.apache.asterix.metadata.entities.Index; +import org.apache.asterix.metadata.entities.InternalDatasetDetails; +import org.apache.asterix.metadata.entities.InternalDatasetDetails.PartitioningStrategy; +import org.apache.asterix.om.types.ARecordType; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; +import org.apache.asterix.runtime.operators.LSMIndexBulkLoadOperatorNodePushable; +import org.apache.asterix.test.common.TestHelper; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.api.comm.VSizeFrame; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.api.job.JobId; +import org.apache.hyracks.api.util.SingleThreadEventProcessor; +import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender; +import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; +import org.apache.hyracks.storage.am.common.api.IIndexDataflowHelper; +import org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory; +import org.apache.hyracks.storage.am.common.datagen.TupleGenerator; +import org.apache.hyracks.storage.am.common.datagen.IFieldValueGenerator; +import org.apache.hyracks.storage.am.lsm.btree.impl.TestLsmBtree; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponent; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexFileManager; +import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndex; +import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentId; +import org.apache.hyracks.storage.am.lsm.common.impls.NoMergePolicyFactory; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import
[1/5] asterixdb git commit: [NO ISSUE][STO] Misc Storage Fixes and Improvements
Repository: asterixdb Updated Branches: refs/heads/master 1a6de0b91 -> 10a3f21de http://git-wip-us.apache.org/repos/asf/asterixdb/blob/10a3f21d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java index f3162c9..f902153 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java @@ -21,6 +21,7 @@ package org.apache.hyracks.storage.am.lsm.rtree.impls; import java.io.IOException; import java.util.LinkedList; import java.util.List; +import java.util.Map; import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory; import org.apache.hyracks.api.dataflow.value.ILinearizeComparatorFactory; @@ -30,7 +31,6 @@ import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; import org.apache.hyracks.storage.am.bloomfilter.impls.BloomCalculations; import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilterSpecification; import org.apache.hyracks.storage.am.btree.impls.BTree; -import org.apache.hyracks.storage.am.btree.impls.BTree.BTreeBulkLoader; import org.apache.hyracks.storage.am.common.api.IIndexOperationContext; import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory; import org.apache.hyracks.storage.am.common.api.ITwoPCIndexBulkLoader; @@ -48,8 +48,10 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext; import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicy; import org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTracker; import org.apache.hyracks.storage.am.lsm.common.api.ITwoPCIndex; +import org.apache.hyracks.storage.am.lsm.common.impls.ChainedLSMDiskComponentBulkLoader; import org.apache.hyracks.storage.am.lsm.common.impls.ExternalIndexHarness; import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences; +import org.apache.hyracks.storage.am.lsm.common.impls.LoadOperation; import org.apache.hyracks.storage.am.rtree.impls.SearchPredicate; import org.apache.hyracks.storage.common.IIndexAccessParameters; import org.apache.hyracks.storage.common.IIndexBulkLoader; @@ -433,131 +435,99 @@ public class ExternalRTree extends LSMRTree implements ITwoPCIndex { // For initial load @Override -public IIndexBulkLoader createBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint) -throws HyracksDataException { -return new LSMTwoPCRTreeBulkLoader(fillLevel, verifyInput, 0, false); +public IIndexBulkLoader createBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint, +Mapparameters) throws HyracksDataException { +return new LSMTwoPCRTreeBulkLoader(fillLevel, verifyInput, 0, false, parameters); } // For transaction bulk load <- could consolidate with the above method -> @Override -public IIndexBulkLoader createTransactionBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint) -throws HyracksDataException { -return new LSMTwoPCRTreeBulkLoader(fillLevel, verifyInput, numElementsHint, true); +public IIndexBulkLoader createTransactionBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint, +Map parameters) throws HyracksDataException { +return new LSMTwoPCRTreeBulkLoader(fillLevel, verifyInput, numElementsHint, true, parameters); } // The bulk loader used for both initial loading and transaction // modifications public class LSMTwoPCRTreeBulkLoader implements IIndexBulkLoader, ITwoPCIndexBulkLoader { private final ILSMDiskComponent component; -private final IIndexBulkLoader rtreeBulkLoader; -private final BTreeBulkLoader btreeBulkLoader; -private final IIndexBulkLoader builder; -private boolean cleanedUpArtifacts = false; -private boolean isEmptyComponent = true; -private boolean endedBloomFilterLoad = false; private final boolean isTransaction; +private final LoadOperation loadOp; +private final ChainedLSMDiskComponentBulkLoader componentBulkLoader; public LSMTwoPCRTreeBulkLoader(float fillFactor, boolean verifyInput, long numElementsHint, -boolean isTransaction) throws HyracksDataException { +boolean isTransaction, Map parameters) throws
[2/5] asterixdb git commit: [NO ISSUE][STO] Misc Storage Fixes and Improvements
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/10a3f21d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java index cfffbe1..a504f7e 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Map; import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory; import org.apache.hyracks.api.exceptions.HyracksDataException; @@ -395,16 +396,16 @@ public class ExternalBTree extends LSMBTree implements ITwoPCIndex { // For initial load @Override -public IIndexBulkLoader createBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint) -throws HyracksDataException { -return new LSMTwoPCBTreeBulkLoader(fillLevel, verifyInput, numElementsHint, false); +public IIndexBulkLoader createBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint, +Mapparameters) throws HyracksDataException { +return new LSMTwoPCBTreeBulkLoader(fillLevel, verifyInput, numElementsHint, false, parameters); } // For transaction bulk load <- could consolidate with the above method -> @Override -public IIndexBulkLoader createTransactionBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint) -throws HyracksDataException { -return new LSMTwoPCBTreeBulkLoader(fillLevel, verifyInput, numElementsHint, true); +public IIndexBulkLoader createTransactionBulkLoader(float fillLevel, boolean verifyInput, long numElementsHint, +Map parameters) throws HyracksDataException { +return new LSMTwoPCBTreeBulkLoader(fillLevel, verifyInput, numElementsHint, true, parameters); } // The bulk loader used for both initial loading and transaction @@ -412,19 +413,35 @@ public class ExternalBTree extends LSMBTree implements ITwoPCIndex { public class LSMTwoPCBTreeBulkLoader implements IIndexBulkLoader, ITwoPCIndexBulkLoader { private final ILSMDiskComponent component; private final ILSMDiskComponentBulkLoader componentBulkLoader; +private final LoadOperation loadOp; private final boolean isTransaction; public LSMTwoPCBTreeBulkLoader(float fillFactor, boolean verifyInput, long numElementsHint, -boolean isTransaction) throws HyracksDataException { +boolean isTransaction, Map parameters) throws HyracksDataException { this.isTransaction = isTransaction; // Create the appropriate target +LSMComponentFileReferences componentFileRefs; if (isTransaction) { -component = createTransactionTarget(); +try { +componentFileRefs = fileManager.getNewTransactionFileReference(); +} catch (IOException e) { +throw HyracksDataException.create(e); +} +component = createDiskComponent(transactionComponentFactory, +componentFileRefs.getInsertIndexFileReference(), null, +componentFileRefs.getBloomFilterFileReference(), true); } else { -component = createBulkLoadTarget(); +componentFileRefs = fileManager.getRelFlushFileReference(); +component = +createDiskComponent(bulkLoadComponentFactory, componentFileRefs.getInsertIndexFileReference(), + componentFileRefs.getDeleteIndexFileReference(), + componentFileRefs.getBloomFilterFileReference(), true); } -LoadOperation loadOp = new LoadOperation(ioOpCallback, getIndexIdentifier()); +loadOp = new LoadOperation(componentFileRefs, ioOpCallback, getIndexIdentifier(), parameters); +loadOp.setNewComponent(component); +ioOpCallback.scheduled(loadOp); +ioOpCallback.beforeOperation(loadOp); componentBulkLoader = component.createBulkLoader(loadOp, fillFactor, verifyInput, numElementsHint, false, true, true); } @@ -438,16 +455,23 @@ public class
asterixdb git commit: [NO ISSUE][TEST] Fix Sporadic failures in CancellationTests
Repository: asterixdb Updated Branches: refs/heads/master 07a0acc54 -> 4d6bce750 [NO ISSUE][TEST] Fix Sporadic failures in CancellationTests - user model changes: no - storage format changes: no - interface changes: no Details: - Multiple queries in a single request can cause an abrupt drop of connection from the server if the first query was processed successfully and then an error occurred. Change-Id: I4df583e2afb0213361f420dc2490e1b5f3d8d835 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2606 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/4d6bce75 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/4d6bce75 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/4d6bce75 Branch: refs/heads/master Commit: 4d6bce750b6621a72ba42499a34ee695efccb3a9 Parents: 07a0acc Author: Abdullah Alamoudi Authored: Wed Apr 18 20:36:56 2018 +0300 Committer: abdullah alamoudi Committed: Wed Apr 18 15:29:40 2018 -0700 -- .../push-socket-with-auuid.10.ddl.sqlpp | 29 +++ .../push-socket-with-auuid.6.query.sqlpp| 4 +-- .../push-socket-with-auuid.7.query.sqlpp| 30 .../push-socket-with-auuid.7.server.sqlpp | 28 -- .../push-socket-with-auuid.8.ddl.sqlpp | 29 --- .../push-socket-with-auuid.8.query.sqlpp| 30 .../push-socket-with-auuid.9.server.sqlpp | 28 ++ .../udf25/udf25.3.query.sqlpp | 4 --- .../udf25/udf25.4.query.sqlpp | 20 + .../push-socket-with-auuid.1.adm| 2 -- .../push-socket-with-auuid.2.adm| 1 + .../push-socket-with-auuid.3.adm| 1 + .../user-defined-functions/udf25/udf25.1.adm| 1 - .../user-defined-functions/udf25/udf25.2.adm| 1 + 14 files changed, 141 insertions(+), 67 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4d6bce75/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.10.ddl.sqlpp -- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.10.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.10.ddl.sqlpp new file mode 100644 index 000..1ec8753 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.10.ddl.sqlpp @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Description : Create a socket feed with datatype without auuid and connect + * it to three different datasets with different datatype: one with auuid, one + * open datatype with auuid and one without auuid using one of the attribute + * as primary key. + * Expected Res : Success + * Date : 20th Mar 2017 + */ + +use experiments; +drop dataverse experiments; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4d6bce75/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.6.query.sqlpp -- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/push-socket-with-auuid/push-socket-with-auuid.6.query.sqlpp index
asterixdb git commit: [NO ISSUE][RT] Fix getting file descriptor counters
Repository: asterixdb Updated Branches: refs/heads/master 34b3577c5 -> 07a0acc54 [NO ISSUE][RT] Fix getting file descriptor counters - user model changes: no - storage format changes: no - interface changes: no Details: - The OS Bean methods return Longs. Prior to this change, there was a cast to Integer which always throws a ClassCastException. Change-Id: Ia6c7cdd26475075975e5850d9fe19b3063d5d9f6 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2607 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/07a0acc5 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/07a0acc5 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/07a0acc5 Branch: refs/heads/master Commit: 07a0acc5423018dd97d2ea6bb2e3fa28fc939a2d Parents: 34b3577 Author: Abdullah Alamoudi Authored: Wed Apr 18 22:24:47 2018 +0300 Committer: abdullah alamoudi Committed: Wed Apr 18 15:29:01 2018 -0700 -- .../main/java/org/apache/hyracks/util/MXHelper.java | 16 1 file changed, 8 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/07a0acc5/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java index 2b65106..2545c25 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/MXHelper.java @@ -64,27 +64,27 @@ public class MXHelper { return getOpenFileDescriptorCount != null; } -public static Integer getCurrentOpenFileCount() { +public static Long getCurrentOpenFileCount() { if (getOpenFileDescriptorCount == null) { -return -1; +return -1L; } try { -return (Integer) getOpenFileDescriptorCount.invoke(osMXBean); +return (Long) getOpenFileDescriptorCount.invoke(osMXBean); } catch (Throwable e) { // NOSONAR LOGGER.log(Level.WARN, "Failure invoking getOpenFileDescriptorCount", e); -return -1; +return -1L; } } -public static Integer getMaxOpenFileCount() { +public static Long getMaxOpenFileCount() { if (getMaxFileDescriptorCount == null) { -return -1; +return -1L; } try { -return (Integer) getMaxFileDescriptorCount.invoke(osMXBean); +return (Long) getMaxFileDescriptorCount.invoke(osMXBean); } catch (Throwable e) { // NOSONAR LOGGER.log(Level.WARN, "Failure invoking getMaxFileDescriptorCount", e); -return -1; +return -1L; } }
asterixdb git commit: [NO ISSUE][TEST] Enable setting HTTP parameters in test queries
Repository: asterixdb Updated Branches: refs/heads/master 33a656d1d -> 95c55f750 [NO ISSUE][TEST] Enable setting HTTP parameters in test queries - user model changes: no - storage format changes: no - interface changes: no Change-Id: I82721bd7b2702f0e3d294996764b03ff4738a457 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2593 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/95c55f75 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/95c55f75 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/95c55f75 Branch: refs/heads/master Commit: 95c55f750f1881f86ea3a5a4db25b62dff8da139 Parents: 33a656d Author: Abdullah Alamoudi Authored: Fri Apr 13 19:00:48 2018 -0700 Committer: abdullah alamoudi Committed: Sat Apr 14 21:29:37 2018 -0700 -- .../asterix/api/http/server/NCQueryCancellationServlet.java | 3 ++- .../apache/asterix/api/http/server/QueryCancellationServlet.java | 4 ++-- .../test/java/org/apache/asterix/test/common/TestExecutor.java | 4 3 files changed, 8 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/95c55f75/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java index da621d2..5ad451f 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java @@ -23,6 +23,7 @@ import static org.apache.asterix.app.message.ExecuteStatementRequestMessage.DEFA import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import org.apache.asterix.api.http.server.QueryServiceServlet.Parameter; import org.apache.asterix.app.message.CancelQueryRequest; import org.apache.asterix.app.message.CancelQueryResponse; import org.apache.asterix.common.messaging.api.INCMessageBroker; @@ -54,7 +55,7 @@ public class NCQueryCancellationServlet extends QueryCancellationServlet { @Override protected void delete(IServletRequest request, IServletResponse response) { // gets the parameter client_context_id from the request. -String clientContextId = request.getParameter(CLIENT_CONTEXT_ID); +String clientContextId = request.getParameter(Parameter.CLIENT_ID.str()); if (clientContextId == null) { response.setStatus(HttpResponseStatus.BAD_REQUEST); return; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/95c55f75/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java index f8655ad..a8b3aef 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java @@ -21,6 +21,7 @@ package org.apache.asterix.api.http.server; import java.io.IOException; import java.util.concurrent.ConcurrentMap; +import org.apache.asterix.api.http.server.QueryServiceServlet.Parameter; import org.apache.asterix.translator.IStatementExecutorContext; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.job.JobId; @@ -38,7 +39,6 @@ import io.netty.handler.codec.http.HttpResponseStatus; */ public class QueryCancellationServlet extends AbstractServlet { private static final Logger LOGGER = LogManager.getLogger(); -protected static final String CLIENT_CONTEXT_ID = "client_context_id"; public QueryCancellationServlet(ConcurrentMap ctx, String... paths) { super(ctx, paths); @@ -46,7 +46,7 @@ public class QueryCancellationServlet extends AbstractServlet { @Override protected void delete(IServletRequest request, IServletResponse response) throws IOException { -String
asterixdb git commit: [NOISSUE][ING] Leave permanently failed actives during recovery
Repository: asterixdb Updated Branches: refs/heads/master 78dc83b12 -> b4e07eab4 [NOISSUE][ING] Leave permanently failed actives during recovery Change-Id: I4cbeae666b1e5d5a9b29a33bac141d60244283ab Reviewed-on: https://asterix-gerrit.ics.uci.edu/2570 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/b4e07eab Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/b4e07eab Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/b4e07eab Branch: refs/heads/master Commit: b4e07eab41be86b3414261461607ee63a627eff0 Parents: 78dc83b Author: Abdullah Alamoudi Authored: Thu Apr 5 11:19:59 2018 -0700 Committer: abdullah alamoudi Committed: Thu Apr 5 15:36:16 2018 -0700 -- .../asterix/app/active/ActiveNotificationHandler.java| 11 +-- 1 file changed, 1 insertion(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b4e07eab/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java index e8bcb10..053e6cd 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java @@ -25,7 +25,6 @@ import java.util.Map; import org.apache.asterix.active.ActiveEvent; import org.apache.asterix.active.ActiveEvent.Kind; -import org.apache.asterix.active.ActivityState; import org.apache.asterix.active.EntityId; import org.apache.asterix.active.IActiveEntityEventsListener; import org.apache.asterix.active.IActiveNotificationHandler; @@ -33,7 +32,6 @@ import org.apache.asterix.active.message.ActivePartitionMessage; import org.apache.asterix.common.api.IMetadataLockManager; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.common.exceptions.RuntimeDataException; -import org.apache.asterix.metadata.api.IActiveEntityController; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.metadata.entities.Dataset; import org.apache.asterix.metadata.utils.DatasetUtil; @@ -214,14 +212,7 @@ public class ActiveNotificationHandler extends SingleThreadEventProcessor
asterixdb git commit: [NO ISSUE][ING] Follow the IFrameWriter contract in Feed Pipeline
Repository: asterixdb Updated Branches: refs/heads/master 282a79198 -> d89934cc1 [NO ISSUE][ING] Follow the IFrameWriter contract in Feed Pipeline - user model changes: no - storage format changes: no - interface changes: yes - it removes unneeded ITupleForwarder interface. Details: - Previously, if a failure happens at the writer.open call in the FeedIntake operator, the IFrameWriter protocol is not followed since we don't fail before close is called. - Previously, fail calls can be done as well inside of the feed adapter. - This change moves failing the pipeline outside the adapter and so the adapter's responsibility is getting records from outside the system while the operator takes care of opening, failing, and closing the writer. Change-Id: Ife679fb9643dc6b39d035e0eecdb915b227503a5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2463 Tested-by: JenkinsContrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/d89934cc Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/d89934cc Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/d89934cc Branch: refs/heads/master Commit: d89934cc15477352fab319e94e502fae4b72d381 Parents: 282a791 Author: Abdullah Alamoudi Authored: Thu Mar 8 22:34:00 2018 -0800 Committer: abdullah alamoudi Committed: Fri Mar 16 10:15:40 2018 -0700 -- .../asterix/external/api/ITupleForwarder.java | 43 - .../dataflow/AbstractDataFlowController.java| 5 +- .../AbstractFeedDataFlowController.java | 28 ++-- .../dataflow/ChangeFeedDataFlowController.java | 9 +- .../ChangeFeedWithMetaDataFlowController.java | 9 +- .../dataflow/CounterTimerTupleForwarder.java| 165 --- .../dataflow/FeedRecordDataFlowController.java | 26 +-- .../dataflow/FeedStreamDataFlowController.java | 13 +- .../external/dataflow/FeedTupleForwarder.java | 126 -- .../FeedWithMetaDataFlowController.java | 7 +- .../dataflow/FrameFullTupleForwarder.java | 67 .../dataflow/IndexingDataFlowController.java| 8 +- .../dataflow/RateControlledTupleForwarder.java | 95 --- .../dataflow/RecordDataFlowController.java | 11 +- .../dataflow/StreamDataFlowController.java | 10 +- .../external/dataflow/TupleForwarder.java | 53 ++ .../external/dataset/adapter/FeedAdapter.java | 10 +- .../FeedIntakeOperatorNodePushable.java | 13 +- .../provider/DataflowControllerProvider.java| 31 ++-- .../asterix/external/util/DataflowUtils.java| 65 .../asterix/external/util/FeedLogManager.java | 22 +-- .../adapter/TestTypedAdapterFactory.java| 18 +- .../api/dataflow/EnforceFrameWriter.java| 4 +- 23 files changed, 154 insertions(+), 684 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d89934cc/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/ITupleForwarder.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/ITupleForwarder.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/ITupleForwarder.java deleted file mode 100644 index 22d0d6b..000 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/ITupleForwarder.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.external.api; - -import org.apache.hyracks.api.comm.IFrameWriter; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.api.exceptions.HyracksDataException; -import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder; -
asterixdb git commit: [NO ISSUE][RT] Fix wait for IO operations
Repository: asterixdb Updated Branches: refs/heads/master 8798c324a -> 282a79198 [NO ISSUE][RT] Fix wait for IO operations - user model changes: no - storage format changes: no - interface changes: no Details: - Some operations such as close dataset, delete components, and drop index need to wait for IO operations. - Before this change, the wait for IO operation would just check the count of IO operations on the dataset info. This is not enough as a flush might have started by writing the flush log to the log tail but only on the flush of that log, we trigger the flush operation and the count of IO operation increases. - To address this problem, we write a wait log before we check the IO operation count ensuring that any flush logs in the log tail have been flushed and counts incremented. Change-Id: Ibfa883410cd24e0af54732f7ea6f1b4eb2184e8e Reviewed-on: https://asterix-gerrit.ics.uci.edu/2495 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/282a7919 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/282a7919 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/282a7919 Branch: refs/heads/master Commit: 282a79198af022563c3d93c51e0d9a052e140ab2 Parents: 8798c32 Author: Abdullah Alamoudi Authored: Thu Mar 15 22:52:53 2018 -0700 Committer: abdullah alamoudi Committed: Fri Mar 16 10:08:33 2018 -0700 -- .../asterix/common/context/DatasetInfo.java | 43 .../common/context/DatasetLifecycleManager.java | 2 +- .../CorrelatedPrefixMergePolicyTest.java| 2 +- .../management/service/logging/LogManager.java | 3 +- 4 files changed, 31 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/282a7919/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java index 44baf77..f4d764a 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetInfo.java @@ -23,6 +23,9 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.apache.asterix.common.transactions.ILogManager; +import org.apache.asterix.common.transactions.LogRecord; +import org.apache.asterix.common.transactions.LogType; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex; import org.apache.logging.log4j.LogManager; @@ -35,6 +38,8 @@ public class DatasetInfo extends Info implements Comparable { // resourceID -> index private final Map indexes; private final int datasetID; +private final ILogManager logManager; +private final LogRecord waitLog = new LogRecord(); private int numActiveIOOps; private long lastAccess; private boolean isExternal; @@ -42,13 +47,16 @@ public class DatasetInfo extends Info implements Comparable { private boolean memoryAllocated; private boolean durable; -public DatasetInfo(int datasetID) { +public DatasetInfo(int datasetID, ILogManager logManager) { this.partitionIndexes = new HashMap<>(); this.indexes = new HashMap<>(); this.setLastAccess(-1); this.datasetID = datasetID; this.setRegistered(false); this.setMemoryAllocated(false); +this.logManager = logManager; +waitLog.setLogType(LogType.WAIT); +waitLog.computeAndSetLogSize(); } @Override @@ -199,23 +207,26 @@ public class DatasetInfo extends Info implements Comparable { this.lastAccess = lastAccess; } -public synchronized void waitForIO() throws HyracksDataException { -while (numActiveIOOps > 0) { -try { -/** - * Will be Notified by {@link DatasetInfo#undeclareActiveIOOperation()} - */ -wait(); -} catch (InterruptedException e) { -Thread.currentThread().interrupt(); -throw HyracksDataException.create(e); +public void waitForIO() throws HyracksDataException { +logManager.log(waitLog); +
asterixdb git commit: [NO ISSUE][OTH] Cancel queries on abrupt close of user connection
Repository: asterixdb Updated Branches: refs/heads/master e45528725 -> 8798c324a [NO ISSUE][OTH] Cancel queries on abrupt close of user connection - user model changes: no - storage format changes: no - interface changes: no Details: - Since there is no point of processing user queries when the user disconnects before getting the response of their requests, the QueryServiceServlet now cancels the user request when that happens. Change-Id: I902b52322153d114f7ca5f0f06e0af9c5ead8f2a Reviewed-on: https://asterix-gerrit.ics.uci.edu/2490 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8798c324 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8798c324 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8798c324 Branch: refs/heads/master Commit: 8798c324aa7e99a92356df2a8567be35fcbd9efe Parents: e455287 Author: Abdullah Alamoudi Authored: Thu Mar 15 23:06:22 2018 -0700 Committer: abdullah alamoudi Committed: Fri Mar 16 09:38:25 2018 -0700 -- .../api/http/server/NCQueryServiceServlet.java | 8 + .../http/server/InterruptOnCloseHandler.java| 37 .../hyracks/http/test/HttpServerTest.java | 3 +- 3 files changed, 47 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8798c324/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java index 5cbac64..3564736 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java @@ -47,7 +47,10 @@ import org.apache.commons.lang3.tuple.Triple; import org.apache.hyracks.api.application.INCServiceContext; import org.apache.hyracks.api.dataset.ResultSetId; import org.apache.hyracks.api.job.JobId; +import org.apache.hyracks.http.api.IChannelClosedHandler; import org.apache.hyracks.http.api.IServletRequest; +import org.apache.hyracks.http.server.HttpServer; +import org.apache.hyracks.http.server.InterruptOnCloseHandler; import org.apache.hyracks.ipc.exceptions.IPCException; import org.apache.logging.log4j.Level; @@ -160,4 +163,9 @@ public class NCQueryServiceServlet extends QueryServiceServlet { super.handleExecuteStatementException(t, execution); } } + +@Override +public IChannelClosedHandler getChannelClosedHandler(HttpServer server) { +return InterruptOnCloseHandler.INSTANCE; +} } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8798c324/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/InterruptOnCloseHandler.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/InterruptOnCloseHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/InterruptOnCloseHandler.java new file mode 100644 index 000..84b802f --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/InterruptOnCloseHandler.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.hyracks.http.server; + +import java.util.concurrent.Future; + +import org.apache.hyracks.http.api.IChannelClosedHandler; +import
asterixdb git commit: [NO ISSUE] Avoid sleep, shutdown log manager on halt
Repository: asterixdb Updated Branches: refs/heads/master c3ee83138 -> 7ffdaba94 [NO ISSUE] Avoid sleep, shutdown log manager on halt Change-Id: I64749ffd98563099bd68926cd7ca0e697f066baf Reviewed-on: https://asterix-gerrit.ics.uci.edu/2485 Sonar-Qube: JenkinsReviewed-by: abdullah alamoudi Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7ffdaba9 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7ffdaba9 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7ffdaba9 Branch: refs/heads/master Commit: 7ffdaba94ad10e959f64720846a00e17c0979846 Parents: c3ee831 Author: Michael Blow Authored: Wed Mar 14 18:47:10 2018 -0700 Committer: Michael Blow Committed: Wed Mar 14 23:13:29 2018 -0700 -- .../src/main/java/org/apache/hyracks/util/ExitUtil.java | 9 ++--- 1 file changed, 2 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7ffdaba9/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java index ec6587e..db5cd13 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java @@ -74,15 +74,10 @@ public class ExitUtil { exit(status); } -@SuppressWarnings("squid:S2142") // catch interrupted public static void halt(int status) { LOGGER.fatal("JVM halting with status " + status + "; bye!", new Throwable("halt stacktrace")); -try { -// try to give time for the log to be emitted... -Thread.sleep(2000); -} catch (InterruptedException e) { -// ignore -} +// try to give time for the log to be emitted... +LogManager.shutdown(); Runtime.getRuntime().halt(status); }
asterixdb git commit: [NO ISSUE][OTH] Log open file count on unexpected HttpServer close
Repository: asterixdb Updated Branches: refs/heads/master d6d42c861 -> 57df8db1b [NO ISSUE][OTH] Log open file count on unexpected HttpServer close - user model changes: no - storage format changes: no - interface changes: no Details: - Recently, there has been some cases where the Http server repeatedly drops its listener. One of the possible causes for this is a leak in open file descriptor. To determine if this is the case, we log the open files count when that happens. Change-Id: Ie43f3392268b3994839d1f98f4de9fe669c7be62 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2483 Sonar-Qube: JenkinsReviewed-by: Michael Blow Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/57df8db1 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/57df8db1 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/57df8db1 Branch: refs/heads/master Commit: 57df8db1b4188940d2f3c8632dcdf1a4c10d0229 Parents: d6d42c8 Author: Abdullah Alamoudi Authored: Wed Mar 14 15:25:29 2018 -0700 Committer: abdullah alamoudi Committed: Wed Mar 14 17:26:57 2018 -0700 -- .../control/common/heartbeat/HeartbeatData.java | 2 +- .../hyracks/control/common/utils/MXHelper.java | 48 - .../control/nc/NodeControllerService.java | 8 +- .../nc/heartbeat/HeartbeatComputeTask.java | 8 +- .../apache/hyracks/http/server/HttpServer.java | 2 + .../java/org/apache/hyracks/util/MXHelper.java | 103 +++ 6 files changed, 114 insertions(+), 57 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/57df8db1/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/heartbeat/HeartbeatData.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/heartbeat/HeartbeatData.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/heartbeat/HeartbeatData.java index d09d0b4..76b68bb 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/heartbeat/HeartbeatData.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/heartbeat/HeartbeatData.java @@ -18,7 +18,7 @@ */ package org.apache.hyracks.control.common.heartbeat; -import static org.apache.hyracks.control.common.utils.MXHelper.gcMXBeans; +import static org.apache.hyracks.util.MXHelper.gcMXBeans; import java.io.DataInput; import java.io.DataOutput; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/57df8db1/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/MXHelper.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/MXHelper.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/MXHelper.java deleted file mode 100644 index cfe8c21..000 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/MXHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.hyracks.control.common.utils; - -import java.lang.management.GarbageCollectorMXBean; -import java.lang.management.ManagementFactory; -import java.lang.management.MemoryMXBean; -import
asterixdb git commit: [NO ISSUE][STO] Improve the LSMIOOperationCallback interface.
Repository: asterixdb Updated Branches: refs/heads/master 17ad87595 -> 517e1d27b [NO ISSUE][STO] Improve the LSMIOOperationCallback interface. - user model changes: no - storage format changes: no - interface changes: yes + ILSMIndexOperationContext.getIoOperationType() + ILSMIndexOperationContext.getNewComponent() * before, after, and finalize calls of ILSMIOOperationCallback now take ILSMIndexOperationContext as a parameter Details: - Before, some calls to ILSMIOOperationCallback take just an enum LSMIOOperationType, some of them take an enum and a component object. These sometimes don't provide enough information to different implementations of the callback that might be interested in more than that. - Having the operation context object passed allow for better exchange of information between different callers and callees throughout the IO operation. Change-Id: Ib7120c40a1a2256ed528dfd2e5853db9dba247c6 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2455 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/517e1d27 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/517e1d27 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/517e1d27 Branch: refs/heads/master Commit: 517e1d27b6baaddec4ad6b01d10ffc8d9ac370b0 Parents: 17ad875 Author: Abdullah Alamoudi Authored: Mon Mar 5 20:34:55 2018 -0800 Committer: abdullah alamoudi Committed: Mon Mar 5 23:58:10 2018 -0800 -- .../TestLsmBtreeIoOpCallbackFactory.java| 29 ++- .../AbstractLSMIOOperationCallback.java | 53 +++--- .../AbstractLSMIOOperationCallbackTest.java | 112 +++- .../TestLSMIndexOperationContext.java | 177 +++ .../am/lsm/btree/impls/ExternalBTree.java | 6 +- .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 5 +- .../am/lsm/common/api/ILSMIOOperation.java | 3 +- .../lsm/common/api/ILSMIOOperationCallback.java | 15 +- .../common/api/ILSMIndexOperationContext.java | 25 +++ .../am/lsm/common/impls/AbstractLSMIndex.java | 7 +- .../impls/AbstractLSMIndexOperationContext.java | 23 +++ .../BlockingIOOperationCallbackWrapper.java | 20 +-- .../impls/ComponentReplacementContext.java | 21 +++ .../lsm/common/impls/ExternalIndexHarness.java | 18 +- .../storage/am/lsm/common/impls/LSMHarness.java | 29 +-- .../impls/LSMIndexDiskComponentBulkLoader.java | 28 +-- .../impls/NoOpIOOperationCallbackFactory.java | 14 +- .../common/impls/StubIOOperationCallback.java | 23 +-- .../am/lsm/rtree/impls/ExternalRTree.java | 8 +- 19 files changed, 442 insertions(+), 174 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/517e1d27/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestLsmBtreeIoOpCallbackFactory.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestLsmBtreeIoOpCallbackFactory.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestLsmBtreeIoOpCallbackFactory.java index c69ffe5..5852ad9 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestLsmBtreeIoOpCallbackFactory.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestLsmBtreeIoOpCallbackFactory.java @@ -18,20 +18,17 @@ */ package org.apache.asterix.test.dataflow; -import java.util.List; - import org.apache.asterix.common.ioopcallbacks.LSMBTreeIOOperationCallback; import org.apache.asterix.common.ioopcallbacks.LSMBTreeIOOperationCallbackFactory; import org.apache.asterix.common.storage.IIndexCheckpointManagerProvider; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.storage.am.lsm.btree.impl.TestLsmBtree; -import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentIdGenerator; import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentIdGeneratorFactory; -import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponent; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation.LSMIOOperationType; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext; import
asterixdb git commit: [NO ISSUE][TEST] Introduce dynamic expected result poll test type
Repository: asterixdb Updated Branches: refs/heads/master 71e4b4c00 -> 90883159b [NO ISSUE][TEST] Introduce dynamic expected result poll test type - user model changes: no - storage format changes: no - interface changes: no Details: - This change allows for a new type of tests. The new test can poll for both expected results and a query and compare the two values. - A test case is added. Change-Id: Ifc132b2d2286eea1d1e119984c33ca5eef9be92a Reviewed-on: https://asterix-gerrit.ics.uci.edu/2438 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Tested-by: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/90883159 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/90883159 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/90883159 Branch: refs/heads/master Commit: 90883159b99f12d98b648dff112605863822a0ac Parents: 71e4b4c Author: Abdullah Alamoudi Authored: Thu Mar 1 15:56:00 2018 -0800 Committer: abdullah alamoudi Committed: Thu Mar 1 21:35:24 2018 -0800 -- .../test/common/IExpectedResultPoller.java | 27 + .../apache/asterix/test/common/IPollTask.java | 51 .../asterix/test/common/TestExecutor.java | 116 --- .../poll-dynamic.1.polldynamic.sqlpp| 22 .../resources/runtimets/testsuite_sqlpp.xml | 5 + 5 files changed, 203 insertions(+), 18 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90883159/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IExpectedResultPoller.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IExpectedResultPoller.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IExpectedResultPoller.java new file mode 100644 index 000..ce2760d --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IExpectedResultPoller.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.common; + +@FunctionalInterface +public interface IExpectedResultPoller { +/** + * @return the expected result as a string + */ +String poll() throws Exception; +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/90883159/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IPollTask.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IPollTask.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IPollTask.java new file mode 100644 index 000..6d32518 --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/IPollTask.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.common; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import
asterixdb git commit: [NO ISSUE][ING] Close and return on interrupt of ingestion
Repository: asterixdb Updated Branches: refs/heads/master 38ca962f4 -> 0ef0e7648 [NO ISSUE][ING] Close and return on interrupt of ingestion - user model changes: no - storage format changes: no - interface changes: no Details: - Previously, we would still attempt to write through the network in case an ingestion task is interrupted. - The goal was to try and get as much data in as possible but in the case where the cluster was in a bad state, this could lead to hanging threads. - After this change, each record reader must implement the stop method correctly to allow for graceful stop while interrupts will always mean abort the task and return as soon as possible. Change-Id: I6119617d133fb161a48b39f9812ec79e0189975b Reviewed-on: https://asterix-gerrit.ics.uci.edu/2428 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Tested-by: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/0ef0e764 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/0ef0e764 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/0ef0e764 Branch: refs/heads/master Commit: 0ef0e76482fd1485d633394c5a02f39acc0614fc Parents: 38ca962 Author: Abdullah Alamoudi Authored: Mon Feb 26 20:23:21 2018 -0800 Committer: abdullah alamoudi Committed: Wed Feb 28 10:44:35 2018 -0800 -- .../asterix/common/exceptions/ErrorCode.java | 1 - .../src/main/resources/asx_errormsg/en.properties | 1 - .../dataflow/FeedRecordDataFlowController.java| 18 -- .../reader/twitter/TwitterPullRecordReader.java | 7 +-- .../operators/FeedIntakeOperatorNodePushable.java | 2 +- 5 files changed, 10 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0ef0e764/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java index 1a83603..04054f1 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java @@ -250,7 +250,6 @@ public class ErrorCode { public static final int ACTIVE_RUNTIME_IS_ALREADY_REGISTERED = 3105; public static final int ACTIVE_RUNTIME_IS_NOT_REGISTERED = 3106; public static final int ACTIVE_EVENT_HANDLER_ALREADY_SUSPENDED = 3107; -public static final int FEED_STOPPED_WHILE_WAITING_FOR_A_NEW_RECORD = 3108; public static final int METADATA_DROP_FUCTION_IN_USE = 3109; public static final int FEED_FAILED_WHILE_GETTING_A_NEW_RECORD = 3110; public static final int FEED_START_FEED_WITHOUT_CONNECTION = 3111; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0ef0e764/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties -- diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties index 995b541..1fb8480 100644 --- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties +++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties @@ -239,7 +239,6 @@ 3105 = %1$s is already registered 3106 = %1$s is not registered 3107 = Active Notification Handler is already suspended -3108 = Feed stopped while waiting for a new record 3109 = Function %1$s is being used. It cannot be dropped 3110 = Feed failed while reading a new record 3111 = Feed %1$s is not connected to any dataset http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0ef0e764/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java index 306a2a5..9826be7 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java @@ -95,11 +95,7 @@ public
asterixdb git commit: [NO ISSUE][TEST] Test flushing of empty component
Repository: asterixdb Updated Branches: refs/heads/master 3fe67422d -> 3278316ab [NO ISSUE][TEST] Test flushing of empty component - user model changes: no - storage format changes: no - interface changes: no Details: Some use cases require flushing of component that have no data but some Metadata. This change adds a test to ensure that always works. Change-Id: If921323dfe03cbd70edc3a8ea8e01226d7527bb3 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2421 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/3278316a Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/3278316a Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/3278316a Branch: refs/heads/master Commit: 3278316abc26ad8e9fd04e5ebec540006bada072 Parents: 3fe6742 Author: Abdullah Alamoudi Authored: Fri Feb 23 22:32:16 2018 -0800 Committer: abdullah alamoudi Committed: Sat Feb 24 09:40:23 2018 -0800 -- .../test/dataflow/FlushMetadataOnlyTest.java| 120 +++ .../context/PrimaryIndexOperationTracker.java | 3 +- .../apache/hyracks/data/std/util/DataUtils.java | 41 +++ 3 files changed, 162 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3278316a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/FlushMetadataOnlyTest.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/FlushMetadataOnlyTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/FlushMetadataOnlyTest.java new file mode 100644 index 000..f9421a1 --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/FlushMetadataOnlyTest.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.dataflow; + +import java.nio.file.Paths; + +import org.apache.asterix.app.bootstrap.TestNodeController; +import org.apache.asterix.app.bootstrap.TestNodeController.PrimaryIndexInfo; +import org.apache.asterix.app.nc.NCAppRuntimeContext; +import org.apache.asterix.common.api.IDatasetLifecycleManager; +import org.apache.asterix.test.base.TestMethodTracer; +import org.apache.asterix.test.common.TestHelper; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.job.JobId; +import org.apache.hyracks.data.std.primitive.VoidPointable; +import org.apache.hyracks.data.std.util.DataUtils; +import org.apache.hyracks.storage.am.common.api.IIndexDataflowHelper; +import org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory; +import org.apache.hyracks.storage.am.common.freepage.MutableArrayValueReference; +import org.apache.hyracks.storage.am.common.impls.NoOpIndexAccessParameters; +import org.apache.hyracks.storage.am.lsm.btree.impl.TestLsmBtree; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor; +import org.apache.hyracks.storage.am.lsm.common.util.ComponentUtils; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; + +public class FlushMetadataOnlyTest { +private static TestNodeController nc; +private static TestLsmBtree lsmBtree; +private static NCAppRuntimeContext ncAppCtx; +private static IDatasetLifecycleManager dsLifecycleMgr; +private static IHyracksTaskContext ctx; +private static IIndexDataflowHelper indexDataflowHelper; +private static final int PARTITION = 0; + +@Rule +public TestRule watcher = new TestMethodTracer(); + +
asterixdb git commit: [NO ISSUE][TXN] Prevent deadlock in Metadata transactions
Repository: asterixdb Updated Branches: refs/heads/master fdf862eac -> 05365fd06 [NO ISSUE][TXN] Prevent deadlock in Metadata transactions - user model changes: no - storage format changes: no - interface changes: no Details: - Flushes in metadata datasets are triggerred by entity update logs, unlike regular transactions where flushes are triggerred by entity commit logs. - Because entity update logs can be writting to disk before the operation completes, there is a chance that an operation that caused the component to be full exits after the log is flushed and so, a flush operation is not scheduled. - This change proposes a simple fix. The fix is that metadata operation will also check if a flush is needed and will schedule one if needed. Change-Id: I07a18840dc54fe052b7bd294595f816f6d8a4d2f Reviewed-on: https://asterix-gerrit.ics.uci.edu/2413 Sonar-Qube: JenkinsReviewed-by: Murtadha Hubail Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/05365fd0 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/05365fd0 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/05365fd0 Branch: refs/heads/master Commit: 05365fd0639c14eed80bfbe67ae3f24fef72228a Parents: fdf862e Author: Abdullah Alamoudi Authored: Wed Feb 21 08:20:39 2018 -0800 Committer: abdullah alamoudi Committed: Wed Feb 21 09:53:09 2018 -0800 -- .../common/context/PrimaryIndexOperationTracker.java | 15 ++- .../org/apache/asterix/metadata/MetadataNode.java| 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/05365fd0/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java -- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java index 1a76b66..f7f2806 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java @@ -86,17 +86,19 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { throws HyracksDataException { if (opType == LSMOperationType.MODIFICATION || opType == LSMOperationType.FORCE_MODIFICATION) { decrementNumActiveOperations(modificationCallback); -if (numActiveOperations.get() == 0) { -flushIfRequested(); -} else if (numActiveOperations.get() < 0) { -throw new HyracksDataException("The number of active operations cannot be negative!"); -} +flushIfNeeded(); } else if (opType == LSMOperationType.FLUSH || opType == LSMOperationType.MERGE || opType == LSMOperationType.REPLICATE) { dsInfo.undeclareActiveIOOperation(); } } +public synchronized void flushIfNeeded() throws HyracksDataException { +if (numActiveOperations.get() == 0) { +flushIfRequested(); +} +} + public void flushIfRequested() throws HyracksDataException { // If we need a flush, and this is the last completing operation, then schedule the flush, // or if there is a flush scheduled by the checkpoint (flushOnExit), then schedule it @@ -177,6 +179,9 @@ public class PrimaryIndexOperationTracker extends BaseOperationTracker { //modificationCallback can be NoOpOperationCallback when redo/undo operations are executed. if (modificationCallback != NoOpOperationCallback.INSTANCE) { numActiveOperations.decrementAndGet(); +if (numActiveOperations.get() < 0) { +throw new IllegalStateException("The number of active operations cannot be negative!"); +} ((AbstractOperationCallback) modificationCallback).afterOperation(); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/05365fd0/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java -- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
asterixdb git commit: [NO ISSUE][ING] Prevent duplicate active runtimes in NCs
Repository: asterixdb Updated Branches: refs/heads/master 02825e092 -> b227a0d37 [NO ISSUE][ING] Prevent duplicate active runtimes in NCs - user model changes: no - storage format changes: no - interface changes: no details: - Previously, when an active runtime is registered, we ignore if the runtime id is already registered. - After this change, such operation will throw an exception. Change-Id: Id7065625537f930394fa7387af2fd1e851582c86 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2392 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/b227a0d3 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/b227a0d3 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/b227a0d3 Branch: refs/heads/master Commit: b227a0d37893831f94a971cc116600860d8d23d7 Parents: 02825e0 Author: Abdullah Alamoudi Authored: Mon Feb 19 15:55:56 2018 -0800 Committer: abdullah alamoudi Committed: Mon Feb 19 22:06:21 2018 -0800 -- .../main/java/org/apache/asterix/active/ActiveManager.java | 4 +++- .../asterix/app/active/ActiveEntityEventsListener.java | 8 2 files changed, 7 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b227a0d3/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java index f9aef4c..bb76204 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java @@ -73,7 +73,9 @@ public class ActiveManager { if (shutdown) { throw new RuntimeDataException(ErrorCode.ACTIVE_MANAGER_SHUTDOWN); } -runtimes.putIfAbsent(runtime.getRuntimeId(), runtime); +if (runtimes.putIfAbsent(runtime.getRuntimeId(), runtime) != null) { +throw new IllegalStateException("Active Runtime " + runtime.getRuntimeId() + " is already registered"); +} } public void deregisterRuntime(ActiveRuntimeId id) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b227a0d3/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 1758daa..2a214e3 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -182,8 +182,9 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl protected void finish(ActiveEvent event) throws HyracksDataException { LOGGER.log(level, "the job " + jobId + " finished"); if (numRegistered != numDeRegistered) { -LOGGER.log(Level.WARN, "the job " + jobId + " finished with reported runtime registrations = " -+ numRegistered + " and deregistrations = " + numDeRegistered + " on node controllers"); +LOGGER.log(Level.WARN, +"the job {} finished with reported runtime registrations = {} and deregistrations = {}", jobId, +numRegistered, numDeRegistered); } jobId = null; Pair status = (Pair ) event.getEventObject(); @@ -194,8 +195,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl jobFailure = exceptions.isEmpty() ? new RuntimeDataException(ErrorCode.UNREPORTED_TASK_FAILURE_EXCEPTION) : exceptions.get(0); setState((state == ActivityState.STOPPING) ? ActivityState.STOPPED : ActivityState.TEMPORARILY_FAILED); -if (prevState != ActivityState.SUSPENDING && prevState != ActivityState.RECOVERING -&& prevState != ActivityState.RESUMING && prevState != ActivityState.STOPPING) { +if (prevState == ActivityState.RUNNING) { recover(); }
asterixdb git commit: [NO ISSUE][OTH] Enable adding request channel close listener
Repository: asterixdb Updated Branches: refs/heads/master 15589b42e -> 02825e092 [NO ISSUE][OTH] Enable adding request channel close listener - user model changes: no - storage format changes: no - interface changes: yes - Introduce IChannelCloseHandler.handle that gets called when the request channel is closed. - Add HttpServer.getChannelCloseHandler - Add IServlet.getChannelCloseHandler details: - Previously, we didn't know that an Http client closed the connection until we try to write and find that the channel has been closed. - After this change, the moment the channel is closed, the http channel close handler is called. - A test is added with a handler that interrupts the execution. Change-Id: I42f1857c0158af6f447282cab8fbd600767b08d5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1972 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Reviewed-by: Michael Blow Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/02825e09 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/02825e09 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/02825e09 Branch: refs/heads/master Commit: 02825e092e1dcd9f6c4b12a15087426374e6d336 Parents: 15589b4 Author: Abdullah Alamoudi Authored: Mon Feb 19 17:09:02 2018 -0800 Committer: abdullah alamoudi Committed: Mon Feb 19 22:05:38 2018 -0800 -- .../hyracks/http/api/IChannelClosedHandler.java | 39 ++ .../org/apache/hyracks/http/api/IServlet.java | 13 ++ .../apache/hyracks/http/server/HttpServer.java | 19 ++- .../hyracks/http/server/HttpServerHandler.java | 12 +- .../hyracks/http/servlet/SleepyServlet.java | 17 ++- .../hyracks/http/test/HttpRequestTask.java | 109 + .../hyracks/http/test/HttpServerTest.java | 119 +++ 7 files changed, 249 insertions(+), 79 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/02825e09/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IChannelClosedHandler.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IChannelClosedHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IChannelClosedHandler.java new file mode 100644 index 000..4e433ad --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IChannelClosedHandler.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.hyracks.http.api; + +import java.util.concurrent.Future; + +import org.apache.hyracks.http.server.HttpServer; + +@FunctionalInterface +public interface IChannelClosedHandler { + +/** + * Handle a request channel closed event + * + * @param server + *the server handling the request + * @param servlet + *the servlet handling the request + * @param task + *the task handling the request + */ +void channelClosed(HttpServer server, IServlet servlet, Future task); +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/02825e09/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServlet.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServlet.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServlet.java index 157eef5..186fb0e 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/api/IServlet.java +++
asterixdb git commit: [NO ISSUE][OTH] Remove logs for legal destroy calls
Repository: asterixdb Updated Branches: refs/heads/master 18ef4b99a -> 15589b42e [NO ISSUE][OTH] Remove logs for legal destroy calls - user model changes: no - storage format changes: no - interface changes: no details: - Previously, we logged when a cursor was destroyed multiple times. - Since this is a legal call, we don't log this anymore. Change-Id: I8fc5c4ad165e44d5259446aad8e64826a672fd77 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2403 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Reviewed-by: Murtadha Hubail Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/15589b42 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/15589b42 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/15589b42 Branch: refs/heads/master Commit: 15589b42e590da67b9b5392541e58827ac1bb804 Parents: 18ef4b9 Author: Abdullah Alamoudi Authored: Mon Feb 19 11:01:24 2018 -0800 Committer: abdullah alamoudi Committed: Mon Feb 19 14:44:22 2018 -0800 -- .../org/apache/hyracks/storage/common/EnforcedIndexCursor.java | 2 -- 1 file changed, 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/15589b42/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/EnforcedIndexCursor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/EnforcedIndexCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/EnforcedIndexCursor.java index 929faff..b7caf7f 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/EnforcedIndexCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/EnforcedIndexCursor.java @@ -85,8 +85,6 @@ public abstract class EnforcedIndexCursor implements IIndexCursor { public final void destroy() throws HyracksDataException { if (ENFORCE_OPEN_CLOSE_DESTROY) { if (state == State.DESTROYED) { -LOGGER.log(Level.WARN, -"multiple cursor.destroy() call in " + Arrays.toString(new Throwable().getStackTrace())); return; } else if (state != State.CLOSED) { if (STORE_TRACES && openCallStack != null) {
asterixdb git commit: [NO ISSUE][RT] follow IFrameWriter protocol in SplitOperatorDescriptor
Repository: asterixdb Updated Branches: refs/heads/master 9b1cd7968 -> 914be5ade [NO ISSUE][RT] follow IFrameWriter protocol in SplitOperatorDescriptor - user model changes: no - storage format changes: no - interface changes: no details: - Previously, the SplitOperatorDescriptor didn't follow the IFrameWriter protocol in case of failure which lead to having some open resources after the job. - This caused so many failures in Cancellation tests. - This change also increases the rate of cancellation during the cancellation tests to ensure that similar problems are found. Change-Id: I3166895589e1ab7355d689397f676f7da5c9809f Reviewed-on: https://asterix-gerrit.ics.uci.edu/2399 Reviewed-by: Taewoo KimTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/914be5ad Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/914be5ad Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/914be5ad Branch: refs/heads/master Commit: 914be5adee7be015fa7804bcbe8a94052cb66985 Parents: 9b1cd79 Author: Abdullah Alamoudi Authored: Sun Feb 18 17:27:04 2018 -0800 Committer: abdullah alamoudi Committed: Sun Feb 18 19:07:57 2018 -0800 -- .../test/common/CancellationTestExecutor.java | 15 ++- .../indexing/ExternalFileIndexAccessor.java | 4 +- .../operators/std/SplitOperatorDescriptor.java | 43 +--- .../apache/hyracks/api/util/CleanupUtils.java | 102 +++ .../apache/hyracks/api/util/DestroyUtils.java | 53 -- .../storage/am/btree/impls/BTreeOpContext.java | 4 +- .../IndexSearchOperatorNodePushable.java| 6 +- ...eIndexDiskOrderScanOperatorNodePushable.java | 4 +- .../am/common/util/ResourceReleaseUtils.java| 27 - .../impls/LSMBTreeDiskComponentScanCursor.java | 4 +- .../am/lsm/btree/impls/LSMBTreeOpContext.java | 8 +- .../btree/impls/LSMBTreeRangeSearchCursor.java | 6 +- .../impls/LSMInvertedIndexOpContext.java| 6 +- .../am/lsm/rtree/impls/LSMRTreeOpContext.java | 10 +- 14 files changed, 169 insertions(+), 123 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/914be5ad/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java index 41aa23f..a1e70dc 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java @@ -63,11 +63,16 @@ public class CancellationTestExecutor extends TestExecutor { } }; Future future = executor.submit(query); -if (cancellable) { -Thread.sleep(20); -// Cancels the query request while the query is executing. -int rc = cancelQuery(getEndpoint(Servlets.RUNNING_REQUESTS), newParams); -Assert.assertTrue(rc == 200 || rc == 404); +while (!future.isDone()) { +if (cancellable) { +Thread.sleep(10); +// Cancels the query request while the query is executing. +int rc = cancelQuery(getEndpoint(Servlets.RUNNING_REQUESTS), newParams); +Assert.assertTrue(rc == 200 || rc == 404); +if (rc == 200) { +break; +} +} } InputStream inputStream = future.get(); // Since the current cancellation (i.e., abort) implementation is based on thread.interrupt and we did not http://git-wip-us.apache.org/repos/asf/asterixdb/blob/914be5ad/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java -- diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java index 5a9852e..58a2413 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java @@
asterixdb git commit: [NO ISSUE][STO] Perform IO reads in uninterruptible threads
Repository: asterixdb Updated Branches: refs/heads/master c3c235743 -> 98574960c [NO ISSUE][STO] Perform IO reads in uninterruptible threads - user model changes: no - storage format changes: no - interface changes: no details: - Previously, IO reads are performed on the task threads. - Task threads can be interrupted which can cause deadlocks due to a JDK synchronization bug. - After this change, 2 IO read threads are there per IO device. - Threads will receive IO read requests and process them. - Such threads are never interrupted and are killed through the use of a poison pill. Change-Id: Id28d57a222f42962284b24296cb9b91658e5dc77 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2387 Integration-Tests: JenkinsTested-by: Jenkins Contrib: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/98574960 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/98574960 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/98574960 Branch: refs/heads/master Commit: 98574960cf9163ca3b15faaf8dcea1581cd22e43 Parents: c3c2357 Author: Abdullah Alamoudi Authored: Wed Feb 14 10:27:40 2018 -0800 Committer: abdullah alamoudi Committed: Fri Feb 16 14:34:16 2018 -0800 -- .../hyracks/hyracks-storage-common/pom.xml | 14 +- .../hyracks/storage/common/IIndexCursor.java| 21 ++- .../storage/common/buffercache/BufferCache.java | 157 +++ .../storage/common/buffercache/CachedPage.java | 42 - 4 files changed, 188 insertions(+), 46 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/98574960/hyracks-fullstack/hyracks/hyracks-storage-common/pom.xml -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/pom.xml b/hyracks-fullstack/hyracks/hyracks-storage-common/pom.xml index 9936e1a..40422f4 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/pom.xml +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/pom.xml @@ -16,18 +16,16 @@ ! specific language governing permissions and limitations ! under the License. !--> - -http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd;> +http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd;> 4.0.0 hyracks-storage-common hyracks-storage-common - org.apache.hyracks hyracks 0.3.4-SNAPSHOT - Apache License, Version 2.0 @@ -36,7 +34,6 @@ A business-friendly OSS license - ${basedir}/../.. @@ -52,8 +49,13 @@ ${project.version} + org.apache.hyracks + hyracks-util + ${project.version} + + org.apache.logging.log4j log4j-api - + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/98574960/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IIndexCursor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IIndexCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IIndexCursor.java index f704921..00c5dce 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IIndexCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IIndexCursor.java @@ -26,14 +26,20 @@ import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; /** * Represents an index cursor. The expected use * cursor = new cursor(); - * while (more predicates){ - * -cursor.open(predicate); - * -while (cursor.hasNext()){ - * --cursor.next() + * try{ + * -while (more predicates){ + * --cursor.open(predicate); + * --try{ + * ---while (cursor.hasNext()){ + * cursor.next() + * ---} + * --} finally{ + * ---cursor.close(); + * --} * -} - * -cursor.close(); + * } finally{ + * -cursor.destroy(); * } - * cursor.destroy(); * Each created cursor must have destroy called * Each successfully opened cursor must have close called * @@ -47,7 +53,8 @@ import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; * When a cursor object is created, it is in the
asterixdb git commit: [NO ISSUE][ING] Ensure Active recovery is triggerred
Repository: asterixdb Updated Branches: refs/heads/master 254eeaa59 -> 0f294d0d1 [NO ISSUE][ING] Ensure Active recovery is triggerred - user model changes: no - storage format changes: no - interface changes: no details: - Previously, when the cluster recovers and tries to notify the active events handler to resume recovery tasks, the notification is performed on the listener but the task waits on itself. - After this change, the task waits on the listener and so the notification wakes up the recovery task correctly. Change-Id: I5fe3a2013a4cb92313648fd04ff2ef3c417270fb Reviewed-on: https://asterix-gerrit.ics.uci.edu/2385 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/0f294d0d Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/0f294d0d Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/0f294d0d Branch: refs/heads/master Commit: 0f294d0d1e2d5718a02e163dcd34c9bea1956963 Parents: 254eeaa Author: Abdullah Alamoudi Authored: Sun Feb 11 13:41:48 2018 -0800 Committer: abdullah alamoudi Committed: Wed Feb 14 10:29:32 2018 -0800 -- .../org/apache/asterix/active/IActiveNotificationHandler.java | 5 + .../apache/asterix/app/active/ActiveEntityEventsListener.java | 2 +- .../apache/asterix/app/active/ActiveNotificationHandler.java| 2 +- .../main/java/org/apache/asterix/app/active/RecoveryTask.java | 2 +- .../apache/asterix/metadata/api/IActiveEntityController.java| 3 +-- 5 files changed, 5 insertions(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0f294d0d/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveNotificationHandler.java -- diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveNotificationHandler.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveNotificationHandler.java index 8b9f232..1d29828 100644 --- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveNotificationHandler.java +++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveNotificationHandler.java @@ -21,7 +21,6 @@ package org.apache.asterix.active; import org.apache.asterix.active.message.ActivePartitionMessage; import org.apache.hyracks.api.exceptions.HyracksDataException; -import org.apache.hyracks.api.job.IJobLifecycleListener; /** * Represents the notification handler for events of active entity jobs @@ -30,10 +29,8 @@ public interface IActiveNotificationHandler { /** * Recover all active jobs that failed - * - * @throws HyracksDataException */ -void recover() throws HyracksDataException; +void recover(); /** * Set whether handler initialization has completed or not http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0f294d0d/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 12bcc0d..1758daa 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -353,7 +353,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl } @Override -public synchronized void recover() throws HyracksDataException { +public synchronized void recover() { LOGGER.log(level, "Recover is called on " + entityId); if (retryPolicyFactory == NoRetryPolicyFactory.INSTANCE) { LOGGER.log(level, "But it has no recovery policy, so it is set to permanent failure"); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/0f294d0d/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java index b8ed03f..e8bcb10 100644 ---
asterixdb git commit: [NO ISSUE] Only close the index in the close of the Upsert Operator
Repository: asterixdb Updated Branches: refs/heads/master 4ff6a36d1 -> e19da1fc3 [NO ISSUE] Only close the index in the close of the Upsert Operator - user model changes: no - storage format changes: no - interface changes: no details: - Previously, a failure in the opening of the upsert operator will cause the index to be closed twice. - After this change, we only close the index in the close call of the operator. Change-Id: I1d76de2781362ef5c80aa926e1112e7872049c71 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2378 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/e19da1fc Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/e19da1fc Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/e19da1fc Branch: refs/heads/master Commit: e19da1fc3ae763ba0adbd5b85fec2163ed23f86b Parents: 4ff6a36 Author: Abdullah Alamoudi Authored: Fri Feb 9 16:11:49 2018 -0800 Committer: abdullah alamoudi Committed: Mon Feb 12 18:03:08 2018 -0800 -- .../operators/LSMPrimaryUpsertOperatorNodePushable.java| 6 ++ 1 file changed, 2 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e19da1fc/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java -- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java index 6bd9d99..e33dfb6 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java @@ -244,10 +244,8 @@ public class LSMPrimaryUpsertOperatorNodePushable extends LSMIndexInsertUpdateDe appender.write(writer, true); } }; - -} catch (Exception e) { -indexHelper.close(); -throw new HyracksDataException(e); +} catch (Throwable e) { // NOSONAR: Re-thrown +throw HyracksDataException.create(e); } }
[5/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java index b4990d6..4610fd2 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java @@ -180,22 +180,24 @@ public class LSMBTree extends AbstractLSMIndex implements ITreeIndex { predicate.setLowKey(tuple); if (needKeyDupCheck) { // first check the inmemory component +boolean found; ctx.getCurrentMutableBTreeAccessor().search(memCursor, predicate); try { -if (memCursor.hasNext()) { +found = memCursor.hasNext(); +if (found) { memCursor.next(); LSMBTreeTupleReference lsmbtreeTuple = (LSMBTreeTupleReference) memCursor.getTuple(); if (!lsmbtreeTuple.isAntimatter()) { throw HyracksDataException.create(ErrorCode.DUPLICATE_KEY); -} else { -memCursor.destroy(); - ctx.getCurrentMutableBTreeAccessor().upsertIfConditionElseInsert(tuple, -AntimatterAwareTupleAcceptor.INSTANCE); -return true; } } } finally { -memCursor.destroy(); +memCursor.close(); +} +if (found) { + ctx.getCurrentMutableBTreeAccessor().upsertIfConditionElseInsert(tuple, +AntimatterAwareTupleAcceptor.INSTANCE); +return true; } // TODO: Can we just remove the above code that search the mutable @@ -213,7 +215,7 @@ public class LSMBTree extends AbstractLSMIndex implements ITreeIndex { throw HyracksDataException.create(ErrorCode.DUPLICATE_KEY); } } finally { -searchCursor.destroy(); +searchCursor.close(); // Add the current active mutable component back ctx.getComponentHolder().add(0, firstComponent); } @@ -241,7 +243,8 @@ public class LSMBTree extends AbstractLSMIndex implements ITreeIndex { MultiComparator comp = MultiComparator.create(getComparatorFactories()); ISearchPredicate pred = new RangePredicate(null, null, true, true, comp, comp); ctx.getSearchInitialState().reset(pred, operationalComponents); -((LSMBTreeSearchCursor) cursor).scan(ctx.getSearchInitialState(), pred); +ctx.getSearchInitialState().setDiskComponentScan(true); +((LSMBTreeSearchCursor) cursor).open(ctx.getSearchInitialState(), pred); } @Override @@ -249,46 +252,55 @@ public class LSMBTree extends AbstractLSMIndex implements ITreeIndex { LSMBTreeFlushOperation flushOp = (LSMBTreeFlushOperation) operation; LSMBTreeMemoryComponent flushingComponent = (LSMBTreeMemoryComponent) flushOp.getFlushingComponent(); IIndexAccessor accessor = flushingComponent.getIndex().createAccessor(NoOpIndexAccessParameters.INSTANCE); - -RangePredicate nullPred = new RangePredicate(null, null, true, true, null, null); -long numElements = 0L; -if (hasBloomFilter) { -//count elements in btree for creating Bloomfilter -IIndexCursor countingCursor = ((BTreeAccessor) accessor).createCountingSearchCursor(); -accessor.search(countingCursor, nullPred); +ILSMDiskComponent component; +ILSMDiskComponentBulkLoader componentBulkLoader; +try { +RangePredicate nullPred = new RangePredicate(null, null, true, true, null, null); +long numElements = 0L; +if (hasBloomFilter) { +//count elements in btree for creating Bloomfilter +IIndexCursor countingCursor = ((BTreeAccessor) accessor).createCountingSearchCursor(); +accessor.search(countingCursor, nullPred); +try { +while (countingCursor.hasNext()) { +countingCursor.next(); +ITupleReference countTuple = countingCursor.getTuple(); +numElements = +
[2/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java index 68a3984..ff28470 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java @@ -60,48 +60,34 @@ import org.apache.hyracks.storage.common.IIndexCursor; import org.apache.hyracks.storage.common.MultiComparator; import org.apache.hyracks.storage.common.buffercache.IBufferCache; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; public class BTreeSearchCursorTest extends AbstractBTreeTest { -protected final int fieldCount = 2; -protected final ITypeTraits[] typeTraits = new ITypeTraits[fieldCount]; -protected final BTreeTypeAwareTupleWriterFactory tupleWriterFactory = -new BTreeTypeAwareTupleWriterFactory(typeTraits, false); -protected final ITreeIndexMetadataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory(); -protected final Random rnd = new Random(50); - -@Override -@Before -public void setUp() throws HyracksDataException { -super.setUp(); -typeTraits[0] = IntegerPointable.TYPE_TRAITS; -typeTraits[1] = IntegerPointable.TYPE_TRAITS; -} +public static final int FIELD_COUNT = 2; +public static final ITypeTraits[] TYPE_TRAITS = { IntegerPointable.TYPE_TRAITS, IntegerPointable.TYPE_TRAITS }; +public static final BTreeTypeAwareTupleWriterFactory TUPLE_WRITER_FACTORY = +new BTreeTypeAwareTupleWriterFactory(TYPE_TRAITS, false); +public static final ITreeIndexMetadataFrameFactory META_FRAME_FACTORY = new LIFOMetaDataFrameFactory(); +public static final int KEY_FIELDS_COUNT = 1; +public static final IBinaryComparatorFactory[] CMP_FACTORIES = +{ PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) }; +public static final ITreeIndexFrameFactory LEAF_FRAME_FACTORY = new BTreeNSMLeafFrameFactory(TUPLE_WRITER_FACTORY); +public static final ITreeIndexFrameFactory INTERIOR_FRAME_FACTORY = +new BTreeNSMInteriorFrameFactory(TUPLE_WRITER_FACTORY); +public static final Random RANDOM = new Random(50); @Test public void uniqueIndexTest() throws Exception { if (LOGGER.isInfoEnabled()) { LOGGER.info("TESTING RANGE SEARCH CURSOR ON UNIQUE INDEX"); } - IBufferCache bufferCache = harness.getBufferCache(); - // declare keys -int keyFieldCount = 1; -IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount]; -cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY); - -ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(tupleWriterFactory); -ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(tupleWriterFactory); - -IBTreeLeafFrame leafFrame = (IBTreeLeafFrame) leafFrameFactory.createFrame(); -IBTreeInteriorFrame interiorFrame = (IBTreeInteriorFrame) interiorFrameFactory.createFrame(); - -IMetadataPageManager freePageManager = new LinkedMetaDataPageManager(bufferCache, metaFrameFactory); - -BTree btree = new BTree(bufferCache, freePageManager, interiorFrameFactory, leafFrameFactory, cmpFactories, -fieldCount, harness.getFileReference()); +IBTreeLeafFrame leafFrame = (IBTreeLeafFrame) LEAF_FRAME_FACTORY.createFrame(); +IBTreeInteriorFrame interiorFrame = (IBTreeInteriorFrame) INTERIOR_FRAME_FACTORY.createFrame(); +IMetadataPageManager freePageManager = new LinkedMetaDataPageManager(bufferCache, META_FRAME_FACTORY); +BTree btree = new BTree(bufferCache, freePageManager, INTERIOR_FRAME_FACTORY, LEAF_FRAME_FACTORY, CMP_FACTORIES, +FIELD_COUNT, harness.getFileReference()); btree.create(); btree.activate(); @@ -111,7 +97,7 @@ public class BTreeSearchCursorTest extends AbstractBTreeTest { TreeSet uniqueKeys = new TreeSet<>(); ArrayList keys = new ArrayList<>(); while (uniqueKeys.size() < numKeys) { -int key = rnd.nextInt() % maxKey; +int key = RANDOM.nextInt() % maxKey; uniqueKeys.add(key); } for (Integer i :
[7/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
[ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor - user model changes: no - storage format changes: no - interface changes: yes - IIndexCursor.close() is now idempotent and can be called on a closed cursor. - IIndexCursor.destroy() is now idempotent and can be called on a destroyed cursor. - Add IIndexAccessor.destroy() letting the accessor know it is safe to destroy its reusable cursors and operation contexts. - Add IIndexOperationContext.destroy() letting the context know that the user is done with it and allow it to release resources details: - Previously, implementations of the IIndexCursor interface didn't enforce the interface contract. This change enforces the contract for all the implementations. - With the enforcement of the contract, all the users of the cursors are expected to follow and enforce the expected lifecycle. - Test cases were added. Change-Id: I98a7a8b931eb24dbe11bf2bdc61b754ca28ebdf9 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2324 Reviewed-by: Michael BlowTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/4ff6a36d Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/4ff6a36d Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/4ff6a36d Branch: refs/heads/master Commit: 4ff6a36d108182e5f36ceac40a27dd89cc29cd23 Parents: 2f392e8 Author: Abdullah Alamoudi Authored: Mon Feb 12 09:24:15 2018 -0800 Committer: abdullah alamoudi Committed: Mon Feb 12 15:27:53 2018 -0800 -- .../apache/asterix/app/nc/RecoveryManager.java | 46 +-- .../message/MetadataNodeRequestMessage.java | 7 +- .../asterix/messaging/CCMessageBroker.java | 2 +- .../asterix/test/storage/DiskIsFullTest.java| 60 ++-- .../dataflow/FeedRecordDataFlowController.java | 35 +- .../indexing/ExternalFileIndexAccessor.java | 13 +- .../input/stream/SocketServerInputStream.java | 37 +-- .../asterix/external/util/DataflowUtils.java| 37 ++- .../apache/asterix/metadata/MetadataNode.java | 192 ++- .../LSMPrimaryUpsertOperatorNodePushable.java | 26 +- .../management/service/logging/LogManager.java | 67 ++-- .../hyracks/api/dataflow/IDestroyable.java | 35 ++ .../api/exceptions/HyracksDataException.java| 32 +- .../apache/hyracks/api/util/DestroyUtils.java | 53 +++ .../apache/hyracks/api/util/ExceptionUtils.java | 108 +++ .../apache/hyracks/control/cc/job/JobRun.java | 2 +- .../control/common/utils/ExceptionUtils.java| 86 - .../org/apache/hyracks/control/nc/Task.java | 2 +- .../hyracks/control/nc/work/StartTasksWork.java | 2 +- .../std/collectors/InputChannelFrameReader.java | 1 - .../tests/unit/EnforcedIndexCursorTest.java | 49 --- .../hyracks/tests/unit/IIndexCursorTest.java| 263 --- .../BTreeUpdateSearchOperatorNodePushable.java | 4 +- .../hyracks/storage/am/btree/impls/BTree.java | 10 + .../btree/impls/BTreeCountingSearchCursor.java | 25 +- .../storage/am/btree/impls/BTreeOpContext.java | 14 + .../am/btree/impls/BTreeRangeSearchCursor.java | 37 ++- .../storage/am/btree/impls/DiskBTree.java | 5 +- .../btree/impls/DiskBTreePointSearchCursor.java | 6 +- .../btree/impls/DiskBTreeRangeSearchCursor.java | 6 +- .../storage/am/btree/test/FramewriterTest.java | 2 + .../hyracks/hyracks-storage-am-common/pom.xml | 30 +- .../am/common/api/IIndexOperationContext.java | 15 +- .../am/common/api/ITreeIndexAccessor.java | 2 + .../dataflow/IndexDropOperatorNodePushable.java | 3 +- .../IndexSearchOperatorNodePushable.java| 61 ++-- ...eIndexDiskOrderScanOperatorNodePushable.java | 79 +++-- .../impls/TreeIndexDiskOrderScanCursor.java | 34 +- .../am/common/util/ResourceReleaseUtils.java| 158 + .../common/test/DummyEnforcedIndexCursor.java | 59 .../am/common/test/EnforcedIndexCursorTest.java | 61 .../am/common/test/IIndexCursorTest.java| 294 + .../hyracks-storage-am-lsm-btree/pom.xml| 10 +- .../lsm/btree/impls/ExternalBTreeOpContext.java | 6 + .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 6 +- .../impls/ExternalBTreeWithBuddyOpContext.java | 6 + .../storage/am/lsm/btree/impls/LSMBTree.java| 175 ++ .../btree/impls/LSMBTreeCursorInitialState.java | 12 +- .../impls/LSMBTreeDiskComponentScanCursor.java | 33 +- .../am/lsm/btree/impls/LSMBTreeOpContext.java | 17 + .../btree/impls/LSMBTreePointSearchCursor.java | 45 ++- .../btree/impls/LSMBTreeRangeSearchCursor.java | 21 +-
[6/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IIndexCursorTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IIndexCursorTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IIndexCursorTest.java deleted file mode 100644 index 4d0f287..000 --- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IIndexCursorTest.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.hyracks.tests.unit; - -import org.apache.hyracks.storage.common.ICursorInitialState; -import org.apache.hyracks.storage.common.IIndexCursor; -import org.apache.hyracks.storage.common.ISearchPredicate; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * This is a test class that forms the basis for unit tests of different implementations of the IIndexCursor interface - */ -public abstract class IIndexCursorTest { -@Test -public void testNormalLifeCycle() throws Exception { -IIndexCursor cursor = createCursor(); -ICursorInitialState initialState = createCursorInitialState(); -List predicates = createSearchPredicates(); -for (ISearchPredicate predicate : predicates) { -cursor.open(initialState, predicate); -while (cursor.hasNext()) { -cursor.next(); -} -cursor.close(); -} -cursor.destroy(); -} - -@Test -public void testCreateDestroySucceed() throws Exception { -IIndexCursor cursor = createCursor(); -cursor.destroy(); -} - -@Test -public void testDoubleOpenFails() throws Exception { -IIndexCursor cursor = createCursor(); -ICursorInitialState initialState = createCursorInitialState(); -List predicates = createSearchPredicates(); -cursor.open(initialState, predicates.get(0)); -boolean expectedExceptionThrown = false; -try { -cursor.open(initialState, predicates.get(0)); -} catch (Exception e) { -expectedExceptionThrown = true; -} -cursor.close(); -cursor.destroy(); -Assert.assertTrue(expectedExceptionThrown); -} - -@Test -public void testCloseWithoutOpenFails() throws Exception { -IIndexCursor cursor = createCursor(); -boolean expectedExceptionThrown = false; -try { -cursor.close(); -} catch (Exception e) { -expectedExceptionThrown = true; -} -cursor.destroy(); -Assert.assertTrue(expectedExceptionThrown); -} - -@Test -public void testDoubleCloseFails() throws Exception { -IIndexCursor cursor = createCursor(); -ICursorInitialState initialState = createCursorInitialState(); -List predicates = createSearchPredicates(); -cursor.open(initialState, predicates.get(0)); -cursor.close(); -boolean expectedExceptionThrown = false; -try { -cursor.close(); -} catch (Exception e) { -expectedExceptionThrown = true; -} -cursor.destroy(); -Assert.assertTrue(expectedExceptionThrown); -} - -@Test -public void testHasNextBeforeOpenFails() throws Exception { -IIndexCursor cursor = createCursor(); -boolean expectedExceptionThrown = false; -try { -cursor.hasNext(); -} catch (Exception e) { -expectedExceptionThrown = true; -} -cursor.destroy(); -Assert.assertTrue(expectedExceptionThrown); -} - -@Test -public void testHasNextAfterCloseFails() throws Exception { -IIndexCursor cursor = createCursor(); -ICursorInitialState initialState = createCursorInitialState(); -List predicates =
[4/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedListCursor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedListCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedListCursor.java index 7bf5322..b2660a4 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedListCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedListCursor.java @@ -81,7 +81,11 @@ public class InMemoryInvertedListCursor implements IInvertedListCursor { @Override public int compareTo(IInvertedListCursor cursor) { -return size() - cursor.size(); +try { +return size() - cursor.size(); +} catch (HyracksDataException hde) { +throw new IllegalStateException(hde); +} } public void reset(ITupleReference tuple) throws HyracksDataException { @@ -113,7 +117,7 @@ public class InMemoryInvertedListCursor implements IInvertedListCursor { @Override public void unpinPages() throws HyracksDataException { if (cursorNeedsClose) { -btreeCursor.destroy(); +btreeCursor.close(); cursorNeedsClose = false; } } @@ -135,29 +139,22 @@ public class InMemoryInvertedListCursor implements IInvertedListCursor { } @Override -public int size() { +public int size() throws HyracksDataException { if (numElements < 0) { btreePred.setLowKeyComparator(tokenFieldsCmp); btreePred.setHighKeyComparator(tokenFieldsCmp); btreePred.setLowKey(tokenTuple, true); btreePred.setHighKey(tokenTuple, true); - // Perform the count. +btreeAccessor.search(countingCursor, btreePred); try { -btreeAccessor.search(countingCursor, btreePred); while (countingCursor.hasNext()) { countingCursor.next(); ITupleReference countTuple = countingCursor.getTuple(); numElements = IntegerPointable.getInteger(countTuple.getFieldData(0), countTuple.getFieldStart(0)); } -} catch (HyracksDataException e) { -e.printStackTrace(); } finally { -try { -countingCursor.destroy(); -} catch (HyracksDataException e) { -e.printStackTrace(); -} +countingCursor.close(); } } return numElements; @@ -197,7 +194,6 @@ public class InMemoryInvertedListCursor implements IInvertedListCursor { try { containsKey = btreeCursor.hasNext(); } finally { -btreeCursor.destroy(); btreeCursor.close(); btreeSearchTuple.removeLastTuple(); } @@ -219,7 +215,6 @@ public class InMemoryInvertedListCursor implements IInvertedListCursor { strBuilder.append(o.toString() + " "); } } finally { -btreeCursor.destroy(); btreeCursor.close(); } btreeAccessor.search(btreeCursor, btreePred); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java index 75bdbc4..eec2993 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java @@ -70,10 +70,7 @@ public class FixedSizeElementInvertedListCursor implements IInvertedListCursor { @Override public boolean hasNext() { -
[1/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
Repository: asterixdb Updated Branches: refs/heads/master 2f392e855 -> 4ff6a36d1 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreeSearchCursorTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreeSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreeSearchCursorTest.java new file mode 100644 index 000..19b3880 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreeSearchCursorTest.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.hyracks.storage.am.lsm.btree.cursor; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference; +import org.apache.hyracks.dataflow.common.utils.TupleUtils; +import org.apache.hyracks.storage.am.btree.impls.RangePredicate; +import org.apache.hyracks.storage.am.btree.util.BTreeUtils; +import org.apache.hyracks.storage.am.common.impls.NoOpIndexAccessParameters; +import org.apache.hyracks.storage.am.common.test.IIndexCursorTest; +import org.apache.hyracks.storage.am.lsm.btree.LSMBTreeExamplesTest; +import org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTree; +import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestHarness; +import org.apache.hyracks.storage.common.IIndexAccessor; +import org.apache.hyracks.storage.common.ISearchPredicate; +import org.apache.hyracks.storage.common.MultiComparator; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +public class LSMBTreeSearchCursorTest extends IIndexCursorTest { + +private static final LSMBTreeTestHarness harness = new LSMBTreeTestHarness(); +private static LSMBTree lsmBtree; + +@BeforeClass +public static void setup() throws HyracksDataException { +harness.setUp(); +lsmBtree = LSMBTreeExamplesTest.createTreeIndex(harness, LSMBTreePointSearchCursorTest.TYPE_TRAITS, +LSMBTreePointSearchCursorTest.CMP_FACTORIES, LSMBTreePointSearchCursorTest.BLOOM_FILTER_KEY_FIELDS, +null, null, null, null); +lsmBtree.create(); +lsmBtree.activate(); +LSMBTreePointSearchCursorTest.insertData(lsmBtree); +} + +@AfterClass +public static void teardown() throws HyracksDataException { +try { +lsmBtree.deactivate(); +lsmBtree.destroy(); +} finally { +harness.tearDown(); +} +} + +@Override +protected List createSearchPredicates() throws Exception { +// exact and windows of length = 50 +List predicates = new ArrayList<>(); +for (int i = 0; i < 10; i++) { +// Build low key. +ArrayTupleBuilder lowKeyTb = new ArrayTupleBuilder(LSMBTreePointSearchCursorTest.KEY_FIELD_COUNT); +ArrayTupleReference lowKey = new ArrayTupleReference(); +TupleUtils.createIntegerTuple(lowKeyTb, lowKey, -100 + (i * 50)); +// Build high key. +ArrayTupleBuilder highKeyTb = new ArrayTupleBuilder(LSMBTreePointSearchCursorTest.KEY_FIELD_COUNT); +ArrayTupleReference highKey = new ArrayTupleReference(); +TupleUtils.createIntegerTuple(highKeyTb, highKey, -100 + (i * 50) + 50); +MultiComparator lowKeySearchCmp = + BTreeUtils.getSearchMultiComparator(LSMBTreePointSearchCursorTest.CMP_FACTORIES, lowKey); +MultiComparator highKeySearchCmp = + BTreeUtils.getSearchMultiComparator(LSMBTreePointSearchCursorTest.CMP_FACTORIES, highKey); +
[3/7] asterixdb git commit: [ASTERIXDB-2204][STO] Fix implementations and usages of IIndexCursor
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java index 6fe6b60..9ef305c 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/TreeTupleSorter.java @@ -25,6 +25,7 @@ import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor; import org.apache.hyracks.storage.am.common.api.ITreeIndexFrame; import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleReference; +import org.apache.hyracks.storage.common.EnforcedIndexCursor; import org.apache.hyracks.storage.common.ICursorInitialState; import org.apache.hyracks.storage.common.ISearchPredicate; import org.apache.hyracks.storage.common.MultiComparator; @@ -32,7 +33,7 @@ import org.apache.hyracks.storage.common.buffercache.IBufferCache; import org.apache.hyracks.storage.common.buffercache.ICachedPage; import org.apache.hyracks.storage.common.file.BufferedFileHandle; -public class TreeTupleSorter implements ITreeIndexCursor { +public class TreeTupleSorter extends EnforcedIndexCursor implements ITreeIndexCursor { private final static int INITIAL_SIZE = 100; private int numTuples; private int currentTupleIndex; @@ -62,13 +63,13 @@ public class TreeTupleSorter implements ITreeIndexCursor { } @Override -public void close() { +public void doClose() { numTuples = 0; currentTupleIndex = 0; } @Override -public boolean hasNext() throws HyracksDataException { +public boolean doHasNext() throws HyracksDataException { if (numTuples <= currentTupleIndex) { return false; } @@ -87,12 +88,12 @@ public class TreeTupleSorter implements ITreeIndexCursor { } @Override -public void next() { +public void doNext() { currentTupleIndex++; } @Override -public ITupleReference getTuple() { +public ITupleReference doGetTuple() { return frameTuple1; } @@ -180,34 +181,32 @@ public class TreeTupleSorter implements ITreeIndexCursor { private int compare(int[] tPointers, int tp1, int tp2i, int tp2j) throws HyracksDataException { int i1 = tPointers[tp1 * 2]; int j1 = tPointers[tp1 * 2 + 1]; - int i2 = tp2i; int j2 = tp2j; - ICachedPage node1 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i1), false); -leafFrame1.setPage(node1); -ICachedPage node2 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i2), false); -leafFrame2.setPage(node2); - try { -frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), j1); -frameTuple2.resetByTupleOffset(leafFrame2.getBuffer().array(), j2); - -return cmp.selectiveFieldCompare(frameTuple1, frameTuple2, comparatorFields); - +leafFrame1.setPage(node1); +ICachedPage node2 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i2), false); +try { +leafFrame2.setPage(node2); +frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), j1); +frameTuple2.resetByTupleOffset(leafFrame2.getBuffer().array(), j2); +return cmp.selectiveFieldCompare(frameTuple1, frameTuple2, comparatorFields); +} finally { +bufferCache.unpin(node2); +} } finally { bufferCache.unpin(node1); -bufferCache.unpin(node2); } } @Override -public void open(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException { +public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException { // do nothing } @Override -public void destroy() throws HyracksDataException { +public void doDestroy() throws HyracksDataException { // do nothing } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4ff6a36d/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java -- diff --git
[1/2] asterixdb git commit: [NO ISSUE][STO] Recover from failure in memory allocation callback
Repository: asterixdb Updated Branches: refs/heads/master 248e18aad -> caf43069b http://git-wip-us.apache.org/repos/asf/asterixdb/blob/caf43069/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java index e9f410d..749b3ba 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java @@ -438,9 +438,29 @@ public abstract class AbstractLSMIndex implements ILSMIndex { if (memoryComponentsAllocated || memoryComponents == null) { return; } -for (ILSMMemoryComponent c : memoryComponents) { -c.allocate(); -ioOpCallback.allocated(c); +int i = 0; +boolean allocated = false; +try { +for (; i < memoryComponents.size(); i++) { +allocated = false; +ILSMMemoryComponent c = memoryComponents.get(i); +c.allocate(); +allocated = true; +ioOpCallback.allocated(c); +} +} finally { +if (i < memoryComponents.size()) { +// something went wrong +if (allocated) { +ILSMMemoryComponent c = memoryComponents.get(i); +c.deallocate(); +} +// deallocate all previous components +for (int j = i - 1; j >= 0; j--) { +ILSMMemoryComponent c = memoryComponents.get(j); +c.deallocate(); +} +} } memoryComponentsAllocated = true; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/caf43069/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java index c0bef7d..3fbef18 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java @@ -237,19 +237,40 @@ public abstract class AbstractLSMMemoryComponent extends AbstractLSMComponent im @Override public final void allocate() throws HyracksDataException { +boolean allocated = false; ((IVirtualBufferCache) getIndex().getBufferCache()).open(); -doAllocate(); +try { +doAllocate(); +allocated = true; +} finally { +if (!allocated) { +((IVirtualBufferCache) getIndex().getBufferCache()).close(); +} +} } protected void doAllocate() throws HyracksDataException { -getIndex().create(); -getIndex().activate(); +boolean created = false; +boolean activated = false; +try { +getIndex().create(); +created = true; +getIndex().activate(); +activated = true; +} finally { +if (created && !activated) { +getIndex().destroy(); +} +} } @Override public final void deallocate() throws HyracksDataException { -doDeallocate(); -getIndex().getBufferCache().close(); +try { +doDeallocate(); +} finally { +getIndex().getBufferCache().close(); +} } protected void doDeallocate() throws HyracksDataException { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/caf43069/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
[2/2] asterixdb git commit: [NO ISSUE][STO] Recover from failure in memory allocation callback
[NO ISSUE][STO] Recover from failure in memory allocation callback - user model changes: no - storage format changes: no - interface changes: no details: - Previously, if an exception is thrown in the ILSMIOOperationCallback.allocated call, then the memory component is allocated but the flag memoryComponentsAllocated is false. - Any subsequent attempt to modify the index will try to allocate the component but since it has already been allocated, it will fail with the exception: File is already mapped. - In this change, if an exception is thrown from the callback, then the component is de-allocated before throwing the exception. - Test is case is added. Change-Id: I80e605461df18c7f6d7785cd7504ca3acb4f45b1 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2336 Reviewed-by: Murtadha HubailSonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/caf43069 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/caf43069 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/caf43069 Branch: refs/heads/master Commit: caf43069baf53259b10087745d931e341f109be1 Parents: 248e18a Author: Abdullah Alamoudi Authored: Tue Jan 30 16:13:01 2018 -0800 Committer: abdullah alamoudi Committed: Tue Jan 30 21:24:08 2018 -0800 -- .../test/dataflow/ComponentRollbackTest.java| 428 +-- .../test/dataflow/IoCallbackFailureTest.java| 159 +++ .../dataflow/MultiPartitionLSMIndexTest.java| 10 +- .../SearchCursorComponentSwitchTest.java| 18 +- .../asterix/test/dataflow/StorageTestUtils.java | 293 + .../am/common/impls/AbstractTreeIndex.java | 28 +- .../am/lsm/common/api/ILSMMemoryComponent.java | 3 +- .../am/lsm/common/impls/AbstractLSMIndex.java | 26 +- .../impls/AbstractLSMMemoryComponent.java | 31 +- .../impls/MultitenantVirtualBufferCache.java| 10 +- .../apache/hyracks/storage/common/IIndex.java | 1 + .../am/lsm/btree/impl/ITestOpCallback.java | 6 +- .../storage/am/lsm/btree/impl/TestLsmBtree.java | 22 +- 13 files changed, 664 insertions(+), 371 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/caf43069/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ComponentRollbackTest.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ComponentRollbackTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ComponentRollbackTest.java index 9828424..a46b029 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ComponentRollbackTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ComponentRollbackTest.java @@ -20,64 +20,38 @@ package org.apache.asterix.test.dataflow; import java.io.File; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.Semaphore; import java.util.function.Predicate; import org.apache.asterix.app.bootstrap.TestNodeController; import org.apache.asterix.app.bootstrap.TestNodeController.PrimaryIndexInfo; -import org.apache.asterix.app.data.gen.TestTupleCounterFrameWriter; import org.apache.asterix.app.data.gen.TupleGenerator; -import org.apache.asterix.app.data.gen.TupleGenerator.GenerationFunction; import org.apache.asterix.app.nc.NCAppRuntimeContext; import org.apache.asterix.common.api.IDatasetLifecycleManager; -import org.apache.asterix.common.config.DatasetConfig.DatasetType; -import org.apache.asterix.common.context.PrimaryIndexOperationTracker; import org.apache.asterix.common.dataflow.LSMInsertDeleteOperatorNodePushable; import org.apache.asterix.common.ioopcallbacks.AbstractLSMIOOperationCallback; import org.apache.asterix.common.transactions.ITransactionContext; import org.apache.asterix.common.transactions.ITransactionManager; import org.apache.asterix.common.transactions.TransactionOptions; import org.apache.asterix.external.util.DataflowUtils; -import org.apache.asterix.file.StorageComponentProvider; -import org.apache.asterix.metadata.entities.Dataset; -import org.apache.asterix.metadata.entities.Index; -import org.apache.asterix.metadata.entities.InternalDatasetDetails; -import
asterixdb git commit: [NOISSUE][TEST] Make store and validate requests non cancellable
Repository: asterixdb Updated Branches: refs/heads/master a252d78a6 -> 248e18aad [NOISSUE][TEST] Make store and validate requests non cancellable - user model changes: no - storage format changes: no - interface changes: no details: - Make store and validate requests non cancellable. Change-Id: I722681d96f1b0de286dcf614ff15fc7aa625aadd Reviewed-on: https://asterix-gerrit.ics.uci.edu/2341 Reviewed-by: Murtadha HubailSonar-Qube: Jenkins Integration-Tests: Jenkins Tested-by: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/248e18aa Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/248e18aa Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/248e18aa Branch: refs/heads/master Commit: 248e18aad2e2482b97a19b0c62eccfd6d4799d0e Parents: a252d78 Author: Abdullah Alamoudi Authored: Tue Jan 30 13:29:40 2018 -0800 Committer: abdullah alamoudi Committed: Tue Jan 30 15:48:48 2018 -0800 -- .../java/org/apache/asterix/test/common/TestExecutor.java| 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/248e18aa/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index 9cce657..eeea05a 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -126,6 +126,8 @@ public class TestExecutor { private static final Pattern MAX_RESULT_READS_PATTERN = Pattern.compile("maxresultreads=(\\d+)(\\D|$)", Pattern.MULTILINE); public static final int TRUNCATE_THRESHOLD = 16384; +public static final Set NON_CANCELLABLE = +Collections.unmodifiableSet(new HashSet<>(Arrays.asList("store", "validate"))); public static final String DELIVERY_ASYNC = "async"; public static final String DELIVERY_DEFERRED = "deferred"; @@ -1221,7 +1223,7 @@ public class TestExecutor { } final URI uri = getEndpoint(Servlets.QUERY_SERVICE); if (DELIVERY_IMMEDIATE.equals(delivery)) { -resultStream = executeQueryService(statement, fmt, uri, params, true, null, true); +resultStream = executeQueryService(statement, fmt, uri, params, true, null, isCancellable(reqType)); resultStream = METRICS_QUERY_TYPE.equals(reqType) ? ResultExtractor.extractMetrics(resultStream) : ResultExtractor.extract(resultStream); } else { @@ -1832,4 +1834,8 @@ public class TestExecutor { return target; } } + +private static boolean isCancellable(String type) { +return !NON_CANCELLABLE.contains(type); +} }
asterixdb git commit: [NO ISSUE][ING] Only delete records if found
Repository: asterixdb Updated Branches: refs/heads/master 61cb03102 -> de7660714 [NO ISSUE][ING] Only delete records if found - user model changes: no - storage format changes: no - interface changes: no details: - Previously, change feeds that perform upserts and deletes used to blindly upsert a record for upserts and upsert an anti-matter for deletes in the absense of secondary indexes or filters. - This lead to size blow out when there are a lot of deletes for keys that don't have values in the index. - In this change, we only apply deletes strictly when a prevous value with the same key is found. Change-Id: Iac32ef87f9da2725bc1b6381a65dba6390b0d3ae Reviewed-on: https://asterix-gerrit.ics.uci.edu/2327 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/de766071 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/de766071 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/de766071 Branch: refs/heads/master Commit: de7660714f467395c7733c94d9656fde912ffbbe Parents: 61cb031 Author: Abdullah Alamoudi Authored: Fri Jan 26 13:31:58 2018 -0800 Committer: abdullah alamoudi Committed: Fri Jan 26 17:16:42 2018 -0800 -- .../operators/LSMPrimaryUpsertOperatorNodePushable.java | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/de766071/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java -- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java index 0d74e30..21259cc 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java @@ -136,8 +136,9 @@ public class LSMPrimaryUpsertOperatorNodePushable extends LSMIndexInsertUpdateDe tb.reset(); boolean recordWasInserted = false; boolean recordWasDeleted = false; +boolean isDelete = isDeleteOperation(tuple, numOfPrimaryKeys); resetSearchPredicate(index); -if (isFiltered || hasSecondaries) { +if (isFiltered || isDelete || hasSecondaries) { lsmAccessor.search(cursor, searchPred); if (cursor.hasNext()) { cursor.next(); @@ -154,12 +155,13 @@ public class LSMPrimaryUpsertOperatorNodePushable extends LSMIndexInsertUpdateDe searchCallback.before(key); // lock appendPreviousTupleAsMissing(); } -if (isDeleteOperation(tuple, numOfPrimaryKeys)) { +if (isDelete && prevTuple != null) { // Only delete if it is a delete and not upsert +// And previous tuple with the same key was found abstractModCallback.setOp(Operation.DELETE); lsmAccessor.forceDelete(tuple); recordWasDeleted = true; -} else { +} else if (!isDelete) { abstractModCallback.setOp(Operation.UPSERT); lsmAccessor.forceUpsert(tuple); recordWasInserted = true;
asterixdb git commit: [NO ISSUE][STO] Introduce ILSMIndexCursor
Repository: asterixdb Updated Branches: refs/heads/master bfa06f8de -> d8d4eefbe [NO ISSUE][STO] Introduce ILSMIndexCursor - user model changes: no - storage format changes: no - interface changes: yes - introduce ILSMIndexCursor as a sub interface for IIndexCursor - move getFilterMinTuple and getFilterMaxTuple to the ILSMIndexCursor interface. details: - IIndexCursor.getFilterMinTuple and IIndexCursor.getFilterMaxTuple don't make sense for any non LSM cursor and all the existing implementations return null for those calls. - In this change, we move those methods to a new interface for LSM Index cursors. Change-Id: I2fabe46e4c3a6370c48c2ccd9689fce507b37009 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2296 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/d8d4eefb Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/d8d4eefb Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/d8d4eefb Branch: refs/heads/master Commit: d8d4eefbe168ca82a316925300a236af9f0d8385 Parents: bfa06f8 Author: Abdullah Alamoudi Authored: Wed Jan 17 17:53:57 2018 -0800 Committer: abdullah alamoudi Committed: Thu Jan 18 12:48:44 2018 -0800 -- .../hyracks/storage/am/btree/impls/BTree.java | 1 + .../btree/impls/BTreeCountingSearchCursor.java | 10 -- .../am/btree/impls/BTreeCursorInitialState.java | 3 +- .../storage/am/btree/impls/BTreeOpContext.java | 2 +- .../am/btree/impls/BTreeRangeSearchCursor.java | 10 -- .../storage/am/common/api/ILSMIndexCursor.java | 36 .../IndexSearchOperatorNodePushable.java| 5 +-- .../impls/TreeIndexDiskOrderScanCursor.java | 10 -- .../btree/impls/LSMBTreePointSearchCursor.java | 3 +- .../lsm/btree/impls/LSMBTreeSearchCursor.java | 5 +-- .../impls/LSMBTreeWithBuddyAbstractCursor.java | 3 +- .../lsm/common/impls/LSMIndexSearchCursor.java | 3 +- .../impls/LSMInvertedIndexSearchCursor.java | 3 +- .../OnDiskInvertedIndexRangeSearchCursor.java | 10 -- .../ondisk/OnDiskInvertedIndexSearchCursor.java | 10 -- .../lsm/rtree/impls/LSMRTreeAbstractCursor.java | 3 +- ...LSMRTreeWithAntiMatterTuplesFlushCursor.java | 3 +- .../am/lsm/rtree/impls/TreeTupleSorter.java | 10 -- .../am/rtree/impls/RTreeSearchCursor.java | 10 -- .../storage/common/EnforcedIndexCursor.java | 10 -- .../hyracks/storage/common/IIndexCursor.java| 11 -- 21 files changed, 57 insertions(+), 104 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d8d4eefb/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTree.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTree.java index 26564e0..6e2d694 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTree.java @@ -718,6 +718,7 @@ public class BTree extends AbstractTreeIndex { } if (restartOp) { // Wait for the SMO to persistFrontiers before restarting. +// We didn't release the pin on the page!! treeLatch.readLock().lock(); treeLatch.readLock().unlock(); ctx.getPageLsns().removeLast(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d8d4eefb/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeCountingSearchCursor.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeCountingSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeCountingSearchCursor.java index 82df92c..10f79a2 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeCountingSearchCursor.java +++
asterixdb git commit: [ASTERIXDB-2204][STO] Add an abstract test case for an IIndexCursor
Repository: asterixdb Updated Branches: refs/heads/master a03ff60a8 -> a49c7cce0 [ASTERIXDB-2204][STO] Add an abstract test case for an IIndexCursor - user model changes: no - storage format changes: no - interface changes: no details: - Add a base test for all implementations of IIndexCursor - The test case includes the following scenarios: --- testNormalLifeCycle --- testCreateDestroySucceed --- testDoubleOpenFails --- testCloseWithoutOpenFails --- testDoubleCloseFails --- testHasNextBeforeOpenFails --- testHasNextAfterCloseFails --- testNextBeforeOpenFails --- testNextAfterCloseFails --- testDestroyWhileOpenFails --- testOpenAfterDestroyFails --- testCloseAfterDestroyFails --- testNextAfterDestroyFails --- testHasNextAfterDestroyFails --- testGetTupleReturnsNullAfterDestroy - Add a base implementation of the interface that conforms to the expected lifecycle and can be extended by any cursor implementation. - The test is run on the base implementation. Change-Id: I7c32dd560367d84403ffa3d9cb69ff80d715fdc5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2291 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a49c7cce Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a49c7cce Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a49c7cce Branch: refs/heads/master Commit: a49c7cce09f7dfb5d0424d7eeef1b61efa6a9aef Parents: a03ff60 Author: Abdullah Alamoudi Authored: Tue Jan 16 17:53:23 2018 -0800 Committer: abdullah alamoudi Committed: Wed Jan 17 10:47:36 2018 -0800 -- .../tests/unit/EnforcedIndexCursorTest.java | 49 .../hyracks/tests/unit/IIndexCursorTest.java| 263 +++ .../storage/common/EnforcedIndexCursor.java | 111 3 files changed, 423 insertions(+) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a49c7cce/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/EnforcedIndexCursorTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/EnforcedIndexCursorTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/EnforcedIndexCursorTest.java new file mode 100644 index 000..8fe689e --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/EnforcedIndexCursorTest.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.hyracks.tests.unit; + +import org.apache.hyracks.storage.common.EnforcedIndexCursor; +import org.apache.hyracks.storage.common.ICursorInitialState; +import org.apache.hyracks.storage.common.IIndexCursor; +import org.apache.hyracks.storage.common.ISearchPredicate; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +public class EnforcedIndexCursorTest extends IIndexCursorTest { +@Override +protected List createSearchPredicates() { +List predicates = new ArrayList<>(); +for (int i = 0; i < 10; i++) { +predicates.add(Mockito.mock(ISearchPredicate.class)); +} +return predicates; +} + +@Override +protected ICursorInitialState createCursorInitialState() { +return Mockito.mock(ICursorInitialState.class); +} + +@Override +protected IIndexCursor createCursor() { +return new EnforcedIndexCursor(); +} +}
asterixdb git commit: [NO ISSUE][RT] Add test cases for runtime failures
Repository: asterixdb Updated Branches: refs/heads/master e54115d7f -> a03ff60a8 [NO ISSUE][RT] Add test cases for runtime failures - user model changes: no - storage format changes: no - interface changes: no details: - Add three test cases: - RuntimeException during initialize() - RuntimeException during deinitialize() - RuntimeException during both Change-Id: If26ade138b003349cfd9619188bd9129ecd1034a Reviewed-on: https://asterix-gerrit.ics.uci.edu/2290 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a03ff60a Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a03ff60a Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a03ff60a Branch: refs/heads/master Commit: a03ff60a8328867da5c20853c4407d90cb92f60d Parents: e54115d Author: Abdullah Alamoudi Authored: Tue Jan 16 18:44:59 2018 -0800 Committer: abdullah alamoudi Committed: Wed Jan 17 10:46:53 2018 -0800 -- .../AbstractMultiNCIntegrationTest.java | 6 +- .../tests/integration/JobFailureTest.java | 66 --- ...nitializeDeInitializeOperatorDescriptor.java | 84 3 files changed, 142 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a03ff60a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/AbstractMultiNCIntegrationTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/AbstractMultiNCIntegrationTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/AbstractMultiNCIntegrationTest.java index a455cc9..7100895 100644 --- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/AbstractMultiNCIntegrationTest.java +++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/AbstractMultiNCIntegrationTest.java @@ -143,7 +143,7 @@ public abstract class AbstractMultiNCIntegrationTest { hcc.cancelJob(jobId); } -protected void runTest(JobSpecification spec, String expectedErrorMessage) throws Exception { +protected JobId runTest(JobSpecification spec, String expectedErrorMessage) throws Exception { if (LOGGER.isInfoEnabled()) { LOGGER.info(spec.toJSON().asText()); } @@ -195,6 +195,7 @@ public abstract class AbstractMultiNCIntegrationTest { // Waiting a second time should lead to the same behavior waitForCompletion(jobId, expectedErrorMessage); dumpOutputFiles(); +return jobId; } protected void waitForCompletion(JobId jobId, String expectedErrorMessage) throws Exception { @@ -244,7 +245,8 @@ public abstract class AbstractMultiNCIntegrationTest { @Override public JobSubmissionStatus allocate(JobSpecification job) throws HyracksException { return maxRAM > job.getRequiredClusterCapacity().getAggregatedMemoryByteSize() -? JobSubmissionStatus.EXECUTE : JobSubmissionStatus.QUEUE; +? JobSubmissionStatus.EXECUTE +: JobSubmissionStatus.QUEUE; } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a03ff60a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/JobFailureTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/JobFailureTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/JobFailureTest.java index 34b1480..478138e 100644 --- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/JobFailureTest.java +++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/JobFailureTest.java @@ -26,6 +26,7 @@ import
asterixdb git commit: [NO ISSUE][STO] Unpin pages when interrupted during reads
Repository: asterixdb Updated Branches: refs/heads/master d15f1 -> f3e4397b3 [NO ISSUE][STO] Unpin pages when interrupted during reads - user model changes: no - storage format changes: no - interface changes: no Details: - This change fixes a bug that happens when a thread pinning a page that is not already in the buffer cache is interrupted. - The fix is that if a failure happens during the read call, the page is unpinned. - A test case is added Change-Id: I8d1c52fcf89ed90e8ef6019cd77842dd7468df49 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2274 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Reviewed-by: Michael Blow Tested-by: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/f3e4397b Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/f3e4397b Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/f3e4397b Branch: refs/heads/master Commit: f3e4397b35804394bcf421d216a53832c0855d55 Parents: d15f888 Author: Abdullah Alamoudi Authored: Mon Jan 15 10:08:57 2018 -0800 Committer: abdullah alamoudi Committed: Mon Jan 15 16:33:28 2018 -0800 -- .../storage/common/buffercache/BufferCache.java | 13 ++- .../hyracks-storage-common-test/pom.xml | 8 ++ .../hyracks/storage/common/BufferCacheTest.java | 107 +++ 3 files changed, 126 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f3e4397b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java index 6212896..302c7b2 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java @@ -186,8 +186,17 @@ public class BufferCache implements IBufferCacheInternal, ILifeCycleComponent { // disk. synchronized (cPage) { if (!cPage.valid) { -tryRead(cPage); -cPage.valid = true; +try { +tryRead(cPage); +cPage.valid = true; +} catch (Exception e) { +LOGGER.log(Level.WARN, "Failure while trying to read a page from disk", e); +throw e; +} finally { +if (!cPage.valid) { +unpin(cPage); +} +} } } } else { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f3e4397b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/pom.xml -- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/pom.xml b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/pom.xml index f93df0a..bb31885 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/pom.xml +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/pom.xml @@ -68,5 +68,13 @@ commons-io commons-io + + org.apache.commons + commons-lang3 + + + org.apache.logging.log4j + log4j-api + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f3e4397b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java index 26ad457..f94914c 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-common-test/src/test/java/org/apache/hyracks/storage/common/BufferCacheTest.java +++
asterixdb git commit: [NO ISSUE][OTR] Remove Unused IndexOp Enum
Repository: asterixdb Updated Branches: refs/heads/master 333e38ef1 -> 178e4f6d1 [NO ISSUE][OTR] Remove Unused IndexOp Enum - user model changes: no - storage format changes: no - interface changes: no Change-Id: Ic7ccbeff5a2de5acf16394c30ba1cf7617c25ccb Reviewed-on: https://asterix-gerrit.ics.uci.edu/2264 Sonar-Qube: JenkinsTested-by: Jenkins Integration-Tests: Jenkins Contrib: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/178e4f6d Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/178e4f6d Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/178e4f6d Branch: refs/heads/master Commit: 178e4f6d19b0b99614202da1cfb16c6a563b433f Parents: 333e38e Author: Murtadha Hubail Authored: Sun Jan 7 00:21:57 2018 +0300 Committer: abdullah alamoudi Committed: Sun Jan 7 07:45:48 2018 -0800 -- .../storage/am/common/ophelpers/IndexOp.java| 24 1 file changed, 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/178e4f6d/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/ophelpers/IndexOp.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/ophelpers/IndexOp.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/ophelpers/IndexOp.java deleted file mode 100644 index 7a0d4e8..000 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/ophelpers/IndexOp.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.hyracks.storage.am.common.ophelpers; - -public enum IndexOp { -INSERT, DELETE, UPDATE, UPSERT, SEARCH, DISKORDERSCAN, PHYSICALDELETE -}
[2/2] asterixdb git commit: [ASTERIXDB-2204][STO] Fix the IIndexCursor interface
[ASTERIXDB-2204][STO] Fix the IIndexCursor interface - user model changes: no - storage format changes: no - interface changes: yes - replace IIndexCursor.reset with close - replace IIndexCursor.close with destroy Details: - This change is the first step towards fixing the behavior of implementors/callers of the IIndexCursor interface - In this change, we simply rename the reset -> close and close -> destroy and we write down the javadocs explaining the semantics of the interface. - LSM Index Cursors don't implements ITreeIndexCursor anymore. Change-Id: I64cf8c0a5473268bdfd71fd560ee6b3bff219ce9 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2238 Tested-by: JenkinsIntegration-Tests: Jenkins Contrib: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/08dc8597 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/08dc8597 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/08dc8597 Branch: refs/heads/master Commit: 08dc8597e2c9bcbf133250487c71b82d53fd1224 Parents: b4899c8 Author: Abdullah Alamoudi Authored: Thu Jan 4 17:56:38 2018 +0300 Committer: abdullah alamoudi Committed: Thu Jan 4 16:35:06 2018 -0800 -- .../indexing/ExternalFileIndexAccessor.java | 4 +- .../apache/asterix/metadata/MetadataNode.java | 23 +-- .../LSMPrimaryUpsertOperatorNodePushable.java | 7 ++-- .../btree/impls/BTreeCountingSearchCursor.java | 6 +-- .../am/btree/impls/BTreeRangeSearchCursor.java | 6 +-- .../storage/am/btree/test/FramewriterTest.java | 2 +- .../IndexSearchOperatorNodePushable.java| 4 +- ...eIndexDiskOrderScanOperatorNodePushable.java | 2 +- .../impls/TreeIndexDiskOrderScanCursor.java | 4 +- .../am/lsm/btree/impls/ExternalBTree.java | 3 +- .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 7 ++-- .../storage/am/lsm/btree/impls/LSMBTree.java| 15 --- .../impls/LSMBTreeDiskComponentScanCursor.java | 4 +- .../lsm/btree/impls/LSMBTreeMergeOperation.java | 4 +- .../btree/impls/LSMBTreePointSearchCursor.java | 42 ++-- .../btree/impls/LSMBTreeRangeSearchCursor.java | 14 +++ .../lsm/btree/impls/LSMBTreeSearchCursor.java | 32 --- .../impls/LSMBTreeWithBuddyAbstractCursor.java | 32 --- .../impls/LSMBTreeWithBuddyMergeOperation.java | 4 +- .../impls/LSMBTreeWithBuddySearchCursor.java| 18 - .../impls/LSMBTreeWithBuddySortedCursor.java| 12 +++--- .../am/lsm/common/impls/AbstractLSMIndex.java | 12 +++--- .../lsm/common/impls/LSMIndexSearchCursor.java | 29 +++--- .../lsm/common/impls/LSMTreeIndexAccessor.java | 5 +-- .../invertedindex/impls/LSMInvertedIndex.java | 10 ++--- .../LSMInvertedIndexRangeSearchCursor.java | 4 +- .../impls/LSMInvertedIndexSearchCursor.java | 16 .../inmemory/InMemoryInvertedListCursor.java| 12 +++--- .../ondisk/OnDiskInvertedIndex.java | 4 +- .../OnDiskInvertedIndexRangeSearchCursor.java | 8 ++-- .../ondisk/OnDiskInvertedIndexSearchCursor.java | 4 +- .../ondisk/PartitionedOnDiskInvertedIndex.java | 2 +- .../am/lsm/rtree/impls/ExternalRTree.java | 9 ++--- .../storage/am/lsm/rtree/impls/LSMRTree.java| 14 +++ .../lsm/rtree/impls/LSMRTreeAbstractCursor.java | 33 +-- .../lsm/rtree/impls/LSMRTreeMergeOperation.java | 4 +- .../lsm/rtree/impls/LSMRTreeSearchCursor.java | 18 - .../lsm/rtree/impls/LSMRTreeSortedCursor.java | 12 +++--- .../impls/LSMRTreeWithAntiMatterTuples.java | 12 +++--- ...LSMRTreeWithAntiMatterTuplesFlushCursor.java | 23 ++- ...SMRTreeWithAntiMatterTuplesSearchCursor.java | 25 ++-- .../am/lsm/rtree/impls/TreeTupleSorter.java | 4 +- .../am/rtree/impls/RTreeSearchCursor.java | 6 +-- .../hyracks/storage/common/IIndexCursor.java| 37 ++--- .../AbstractSearchOperationCallbackTest.java| 2 +- .../am/btree/OrderedIndexExamplesTest.java | 9 ++--- .../storage/am/btree/OrderedIndexTestUtils.java | 9 ++--- .../am/common/AbstractIndexTestWorker.java | 2 +- .../storage/am/common/TreeIndexTestUtils.java | 10 +++-- .../am/rtree/AbstractRTreeExamplesTest.java | 12 +++--- .../storage/am/rtree/RTreeTestUtils.java| 8 ++-- .../storage/am/btree/BTreeSearchCursorTest.java | 2 +- .../storage/am/btree/BTreeUpdateSearchTest.java | 4 +- .../am/btree/multithread/BTreeTestWorker.java | 8 ++-- .../LSMBTreeSearchOperationCallbackTest.java| 2 +- ...TreeUpdateInPlaceScanDiskComponentsTest.java | 2 +- .../btree/multithread/LSMBTreeTestWorker.java | 4 +-
asterixdb git commit: [NO ISSUE][TEST] Store a query output for subsequent test calls
Repository: asterixdb Updated Branches: refs/heads/master 4756d1ca0 -> 32905418e [NO ISSUE][TEST] Store a query output for subsequent test calls - user model changes: no - storage format changes: no - interface changes: no Details: - With this change, the test framework allow for a query to store its output for access by subsequent calls. The change also allow for a query to validate its output against a previous query. - This change also fixes a bug in Function datasource field access. Change-Id: Iab329fbdf4def5b46686a61c9399520ae71518c4 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2235 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/32905418 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/32905418 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/32905418 Branch: refs/heads/master Commit: 32905418e6560496aa33df25ad497075605cfdae Parents: 4756d1c Author: Abdullah Alamoudi Authored: Thu Jan 4 04:30:49 2018 +0300 Committer: abdullah alamoudi Committed: Thu Jan 4 08:32:02 2018 -0800 -- .../optimizer/rules/PushFieldAccessRule.java| 23 ++-- .../app/function/StorageComponentsFunction.java | 2 +- .../app/function/StorageComponentsReader.java | 6 +- .../asterix/test/common/TestExecutor.java | 112 +-- .../validate-expected.1.store.sqlpp | 21 .../validate-expected.2.validate.sqlpp | 20 .../resources/runtimets/testsuite_sqlpp.xml | 5 + 7 files changed, 140 insertions(+), 49 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java index e0fb1db..1766010 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java @@ -99,8 +99,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { @SuppressWarnings("unchecked") private boolean isAccessToIndexedField(AssignOperator assign, IOptimizationContext context) throws AlgebricksException { -AbstractFunctionCallExpression accessFun = (AbstractFunctionCallExpression) assign.getExpressions().get(0) -.getValue(); +AbstractFunctionCallExpression accessFun = +(AbstractFunctionCallExpression) assign.getExpressions().get(0).getValue(); ILogicalExpression e0 = accessFun.getArguments().get(0).getValue(); if (e0.getExpressionTag() != LogicalExpressionTag.VARIABLE) { return false; @@ -161,8 +161,7 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { if (op2.getOperatorTag() != LogicalOperatorTag.SELECT) { return false; } -ILogicalExpression e1 = (ILogicalExpression) access.getAnnotations() -.get(OperatorAnnotation.FIELD_ACCESS); +ILogicalExpression e1 = (ILogicalExpression) access.getAnnotations().get(OperatorAnnotation.FIELD_ACCESS); if (e1 == null) { return false; } @@ -215,8 +214,7 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { pushItDown = true; } else if (op2.getOperatorTag() == LogicalOperatorTag.GROUP) { GroupByOperator g = (GroupByOperator) op2; -List > varMappings = -new ArrayList<>(); +List > varMappings = new ArrayList<>(); for (Pair p : g.getDecorList()) { ILogicalExpression e = p.second.getValue(); if (e.getExpressionTag() == LogicalExpressionTag.VARIABLE) { @@ -249,8 +247,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { } if (pushItDown) { if (op2.getOperatorTag() == LogicalOperatorTag.NESTEDTUPLESOURCE) { -Mutable childOfSubplan = ((NestedTupleSourceOperator) op2).getDataSourceReference() -
asterixdb git commit: [NO ISSUE][ING] Stop Succeeds When Feed Fails
Repository: asterixdb Updated Branches: refs/heads/master 665e9fe4d -> 36b543d3b [NO ISSUE][ING] Stop Succeeds When Feed Fails - user model changes: no - storage format changes: no - interface changes: no Details: - Before this change, if a feed fails after stop is issued, it goes to a failure state and the stop request will be stuck waiting for the feed to go to a stopped state. - With this change, a failure in the feed will cause it to go to a stopped state if a stop request was issued. - Test case is added Change-Id: I486e11a339c1dfadc6a2a357c95a83dfc05772a1 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2258 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Murtadha Hubail Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/36b543d3 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/36b543d3 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/36b543d3 Branch: refs/heads/master Commit: 36b543d3b8a1e9c178d2c354aa2d544693be0832 Parents: 665e9fe Author: Abdullah Alamoudi Authored: Wed Jan 3 15:06:30 2018 +0300 Committer: abdullah alamoudi Committed: Wed Jan 3 06:18:08 2018 -0800 -- .../app/active/ActiveEntityEventsListener.java | 10 -- .../test/active/ActiveEventsListenerTest.java | 21 .../org/apache/asterix/test/active/Actor.java | 5 + .../asterix/test/active/TestEventsListener.java | 5 +++-- .../api/util/SingleThreadEventProcessor.java| 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/36b543d3/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 8cbc109..12bcc0d 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -193,9 +193,9 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl if (jobStatus.equals(JobStatus.FAILURE)) { jobFailure = exceptions.isEmpty() ? new RuntimeDataException(ErrorCode.UNREPORTED_TASK_FAILURE_EXCEPTION) : exceptions.get(0); -setState(ActivityState.TEMPORARILY_FAILED); +setState((state == ActivityState.STOPPING) ? ActivityState.STOPPED : ActivityState.TEMPORARILY_FAILED); if (prevState != ActivityState.SUSPENDING && prevState != ActivityState.RECOVERING -&& prevState != ActivityState.RESUMING) { +&& prevState != ActivityState.RESUMING && prevState != ActivityState.STOPPING) { recover(); } } else { @@ -551,4 +551,10 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl public String getDisplayName() throws HyracksDataException { return this.getEntityId().toString(); } + +@Override +public String toString() { +return "{\"class\":\"" + getClass().getSimpleName() + "\"" + "\"entityId\":\"" + entityId + "\"" ++ "\"state\":\"" + state + "\"" + "}"; +} } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/36b543d3/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java index 40d4f6a..093d150 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java @@ -346,6 +346,27 @@ public class ActiveEventsListenerTest { Assert.assertEquals(ActivityState.RUNNING, listener.getState()); } +@Test +public void testStopFromRunningAndJobFails() throws Exception { +testStartWhenStartSucceed(); +Assert.assertEquals(ActivityState.RUNNING, listener.getState()); +listener.onStop(Behavior.STEP_SUCCEED); +
asterixdb git commit: [ASTERIXDB-920] Fix BTree Composite Key Search
Repository: asterixdb Updated Branches: refs/heads/master d90723359 -> 791ff5f2d [ASTERIXDB-920] Fix BTree Composite Key Search - user model changes: no - storage format changes: no - interface changes: no Details: When we search a primary BTree with composite keys, we should always add another select operator to filter out results, unless only the last key is a range search. The reason is that when we search a BTree, we iterate from the start index (based on the composite low range) to the end index (based on the composite high range). However, during the iteration, there could be a lot of false positives. This patch fixes this bug by preserving the select operator in case of composite keys. Change-Id: I8654e52aec59601c533255cd57c2824612066fc0 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2227 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/791ff5f2 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/791ff5f2 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/791ff5f2 Branch: refs/heads/master Commit: 791ff5f2d58e1f42d1851131496ac14e981d458e Parents: d907233 Author: luochen01 Authored: Fri Dec 22 06:30:39 2017 +0800 Committer: abdullah alamoudi Committed: Thu Dec 21 22:36:32 2017 -0800 -- .../optimizer/rules/am/BTreeAccessMethod.java | 23 +-- .../primary-composite-key-join_01.plan | 13 +++--- .../primary-composite-key-join_02.plan | 13 +++--- .../results/btree-index/btree-primary-15.plan | 11 ++--- .../results/btree-index/btree-primary-16.plan | 11 ++--- .../results/btree-index/btree-primary-19.plan | 11 ++--- .../results/btree-index/btree-primary-20.plan | 11 ++--- .../primary-composite-key-join_01.plan | 23 ++- .../primary-composite-key-join_02.plan | 23 ++- .../btree-index/btree-primary-15.plan | 13 -- .../btree-index/btree-primary-16.plan | 13 -- .../btree-index/btree-primary-19.plan | 13 -- .../btree-index/btree-primary-20.plan | 13 -- .../skip-index/dont-skip-primary-index.plan | 11 ++--- .../composite-low-high.1.ddl.sqlpp | 43 .../composite-low-high.2.update.sqlpp | 38 + .../composite-low-high.3.query.sqlpp| 27 .../query-ASTERIXDB-920.1.ddl.sqlpp | 40 ++ .../query-ASTERIXDB-920.2.update.sqlpp | 32 +++ .../query-ASTERIXDB-920.3.query.sqlpp | 26 .../composite-low-high/composite-low-high.1.adm | 3 ++ .../query-ASTERIXDB-920.1.adm | 1 + .../resources/runtimets/testsuite_sqlpp.xml | 12 ++ 23 files changed, 339 insertions(+), 85 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/791ff5f2/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java index ddc93f8..29d00d0 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java @@ -416,22 +416,21 @@ public class BTreeAccessMethod implements IAccessMethod { return null; } -// If the select condition contains mixed open/closed intervals on multiple keys, then we make all intervals -// closed to obtain a superset of answers and leave the original selection in place. +// if we have composite search keys, we should always need a post-processing to ensure the correctness +// of search results because of the way a BTree is searched, unless only the last key is a range search. +// During a BTree search, we iterate from the start index +// (based on the low keys) to the end index (based on the high keys). During the iteration, +// we can encounter a lot of false positives boolean primaryIndexPostProccessingIsNeeded = false; -for (int i = 1; i < numSecondaryKeys; ++i) { -if (lowKeyInclusive[i] != lowKeyInclusive[0]) { -
asterixdb git commit: [NO ISSUE][TEST] Allow Diagnostic files to be run for failing tests
Repository: asterixdb Updated Branches: refs/heads/master 56295d9bb -> ee30e8bde [NO ISSUE][TEST] Allow Diagnostic files to be run for failing tests - user model changes: no - storage format changes: no - interface changes: no Details: - With this change, one can add diagnostic files to test cases those files are not to be executed during the tests but can be run to collect information in failing test cases. Change-Id: I798726514cd46bcee04a8f290df54ae5bb4fb0a6 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2230 Sonar-Qube: JenkinsIntegration-Tests: Jenkins Tested-by: Jenkins Contrib: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/ee30e8bd Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/ee30e8bd Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/ee30e8bd Branch: refs/heads/master Commit: ee30e8bde16b86fbe67c579aa1209c90addb9db9 Parents: 56295d9 Author: Abdullah Alamoudi Authored: Wed Dec 20 09:00:43 2017 +0300 Committer: abdullah alamoudi Committed: Wed Dec 20 10:50:34 2017 -0800 -- .../asterix/test/common/TestExecutor.java | 95 ++-- 1 file changed, 68 insertions(+), 27 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ee30e8bd/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index a86dbf9..d66c2e9 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -127,8 +127,10 @@ public class TestExecutor { public static final String DELIVERY_ASYNC = "async"; public static final String DELIVERY_DEFERRED = "deferred"; public static final String DELIVERY_IMMEDIATE = "immediate"; +public static final String DIAGNOSE = "diagnose"; private static final String METRICS_QUERY_TYPE = "metrics"; + private static final HashMap runningTestServers = new HashMap<>(); private static Map ncEndPoints; private static Map replicationAddress; @@ -213,7 +215,7 @@ public class TestExecutor { if (lineExpected.isEmpty()) { continue; } -throw createLineChangedException(scriptFile, lineExpected, " after " + num + " lines", num); +throw createLineChangedException(scriptFile, lineExpected, "", num); } // Comparing result equality but ignore "Time"-prefixed fields. (for metadata tests.) @@ -248,7 +250,7 @@ public class TestExecutor { } lineActual = readerActual.readLine(); if (lineActual != null) { -throw createLineChangedException(scriptFile, "expected ", lineActual, num); +throw createLineChangedException(scriptFile, "", lineActual, num); } } catch (Exception e) { System.err.println("Actual results file: " + actualFile.toString()); @@ -262,8 +264,8 @@ public class TestExecutor { private ComparisonException createLineChangedException(File scriptFile, String lineExpected, String lineActual, int num) { -return new ComparisonException("Result for " + scriptFile + " changed at line " + num + ":\n< " -+ truncateIfLong(lineExpected) + "\n> " + truncateIfLong(lineActual)); +return new ComparisonException("Result for " + scriptFile + " changed at line " + num + ":\nexpected < " ++ truncateIfLong(lineExpected) + "\nactual > " + truncateIfLong(lineActual)); } private String truncateIfLong(String string) { @@ -888,8 +890,9 @@ public class TestExecutor { executeScript(pb, pb.environment().get("SCRIPT_HOME") + File.separator + "dml_recovery" + File.separator + "stop_and_start.sh"); } -expectedResultFile = (queryCount.intValue() >= expectedResultFileCtxs.size()) ? null -: expectedResultFileCtxs.get(queryCount.intValue()).getFile(); +expectedResultFile = +(queryCount.intValue() < 0 ||
[1/2] asterixdb git commit: [ASTERIXDB-2194][COMP] Introduce datasource functions
Repository: asterixdb Updated Branches: refs/heads/master 26cc90802 -> b4d166b3c http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b4d166b3/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java new file mode 100644 index 000..c143a63 --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.util; + +import org.apache.asterix.app.function.DatasetResourcesRewriter; +import org.apache.asterix.app.function.DatasetRewriter; +import org.apache.asterix.app.function.FeedRewriter; +import org.apache.asterix.app.function.StorageComponentsRewriter; +import org.apache.asterix.om.functions.BuiltinFunctions; +import org.apache.asterix.om.utils.RecordUtil; + +public class MetadataBuiltinFunctions { + +static { +// Dataset function +BuiltinFunctions.addFunction(BuiltinFunctions.DATASET, DatasetRewriter.INSTANCE, true); +BuiltinFunctions.addUnnestFun(BuiltinFunctions.DATASET, false); +BuiltinFunctions.addDatasourceFunction(BuiltinFunctions.DATASET, DatasetRewriter.INSTANCE); +// Feed collect function +BuiltinFunctions.addPrivateFunction(BuiltinFunctions.FEED_COLLECT, FeedRewriter.INSTANCE, true); +BuiltinFunctions.addUnnestFun(BuiltinFunctions.FEED_COLLECT, false); +BuiltinFunctions.addDatasourceFunction(BuiltinFunctions.FEED_COLLECT, FeedRewriter.INSTANCE); +// Dataset resources function + BuiltinFunctions.addPrivateFunction(DatasetResourcesRewriter.DATASET_RESOURCES, +(expression, env, mp) -> RecordUtil.FULLY_OPEN_RECORD_TYPE, true); + BuiltinFunctions.addUnnestFun(DatasetResourcesRewriter.DATASET_RESOURCES, false); + BuiltinFunctions.addDatasourceFunction(DatasetResourcesRewriter.DATASET_RESOURCES, +DatasetResourcesRewriter.INSTANCE); +// Dataset components function + BuiltinFunctions.addPrivateFunction(StorageComponentsRewriter.STORAGE_COMPONENTS, +(expression, env, mp) -> RecordUtil.FULLY_OPEN_RECORD_TYPE, true); + BuiltinFunctions.addUnnestFun(StorageComponentsRewriter.STORAGE_COMPONENTS, false); + BuiltinFunctions.addDatasourceFunction(StorageComponentsRewriter.STORAGE_COMPONENTS, +StorageComponentsRewriter.INSTANCE); + +} + +private MetadataBuiltinFunctions() { +} + +public static void init() { +// Only execute the static block +} +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/b4d166b3/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java index 9a4..ac249b7 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java @@ -54,7 +54,6 @@ import org.apache.asterix.external.operators.FeedIntakeOperatorDescriptor; import org.apache.asterix.external.operators.FeedIntakeOperatorNodePushable; import org.apache.asterix.external.operators.FeedMetaOperatorDescriptor; import org.apache.asterix.external.util.ExternalDataUtils; -import org.apache.asterix.external.util.FeedConstants; import org.apache.asterix.external.util.FeedUtils; import org.apache.asterix.external.util.FeedUtils.FeedRuntimeType; import org.apache.asterix.file.StorageComponentProvider; @@ -87,6 +86,7 @@ import org.apache.asterix.metadata.entities.FeedConnection; import org.apache.asterix.metadata.entities.FeedPolicyEntity; import org.apache.asterix.metadata.feeds.FeedMetadataUtil; import
asterixdb git commit: [NO ISSUE][CLUS] Allow Extension of cc application context
Repository: asterixdb Updated Branches: refs/heads/master 8d868fbdd -> 3180d8702 [NO ISSUE][CLUS] Allow Extension of cc application context - user model changes: no - storage format changes: no - interface changes: yes + ICcApplicationContext.setExtensionManager + ICcApplicationContext.getExtensionProperties details: - This change allows better extension of cc application context. While this was possible before this change, the cc can end up with multiple app context which can lead to bad situations. Change-Id: I924716b037bf94b68dd9ffa2ec0043c75f4e81a6 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2192 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/3180d870 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/3180d870 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/3180d870 Branch: refs/heads/master Commit: 3180d87021f7d94119e5de2890da96560122504b Parents: 8d868fb Author: Abdullah Alamoudi Authored: Mon Dec 4 17:41:05 2017 -0800 Committer: abdullah alamoudi Committed: Tue Dec 5 11:11:54 2017 -0800 -- .../extension/IAlgebraExtensionManager.java | 23 --- .../api/http/server/ClusterApiServlet.java | 3 +- .../asterix/app/cc/CCExtensionManager.java | 18 +++--- .../hyracks/bootstrap/CCApplication.java| 28 .../bootstrap/ClusterLifecycleListener.java | 7 +- .../asterix/test/common/TestExecutor.java | 67 ++-- .../common/dataflow/ICcApplicationContext.java | 13 .../runtime/utils/CcApplicationContext.java | 3 +- .../hyracks/http/test/HttpServerTest.java | 7 +- 9 files changed, 85 insertions(+), 84 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3180d870/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IAlgebraExtensionManager.java -- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IAlgebraExtensionManager.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IAlgebraExtensionManager.java deleted file mode 100644 index d9641df..000 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/IAlgebraExtensionManager.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.algebra.extension; - -public interface IAlgebraExtensionManager { - -} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/3180d870/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java index 165c104..6826b26 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java @@ -28,7 +28,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.runtime.utils.CcApplicationContext; import org.apache.hyracks.api.config.IOption; import org.apache.hyracks.api.config.Section; import org.apache.hyracks.control.common.config.ConfigUtils; @@ -97,7 +96,7 @@ public class ClusterApiServlet extends AbstractServlet { protected ObjectNode getClusterStateJSON(IServletRequest request, String pathToNode) {
[2/2] asterixdb git commit: [ASTERIXDB-2161][TEST] Add indexes to MultiPartitionTest
[ASTERIXDB-2161][TEST] Add indexes to MultiPartitionTest - user model changes: no - storage format changes: no - interface changes: no Details: - This change adds secondary indexes to multi partition LSM indexes tests. - This enables testing of specific concurrency scenarios and ensuring properties stored in primary and secondary indexes are consistent. - In addition, the call for flushDataset in DatasetLifecycleManager now throws an IllegalStateException if the number of active operations is not 0. Some tests used to call this function when there are ongoing operations and that is expected to never be the case in the actual system. Change-Id: I5aea71a87f149b01f6c7310867fc15b5a340b93c Reviewed-on: https://asterix-gerrit.ics.uci.edu/2173 Tested-by: JenkinsReviewed-by: Luo Chen Integration-Tests: Jenkins Contrib: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/c5a0a197 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/c5a0a197 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/c5a0a197 Branch: refs/heads/master Commit: c5a0a1974d36d647a22d606d53bdaafd85f641df Parents: f9e6bae Author: Abdullah Alamoudi Authored: Mon Nov 27 11:53:30 2017 -0800 Committer: abdullah alamoudi Committed: Mon Nov 27 13:11:06 2017 -0800 -- .../app/bootstrap/TestNodeController.java | 213 ++- .../test/dataflow/ComponentRollbackTest.java| 139 +++-- .../asterix/test/dataflow/LogMarkerTest.java| 2 +- .../dataflow/MultiPartitionLSMIndexTest.java| 561 +-- .../SearchCursorComponentSwitchTest.java| 21 +- .../TestLsmBTreeResourceFactoryProvider.java| 4 + .../TestLsmBtreeIoOpCallbackFactory.java| 40 ++ .../TestPrimaryIndexOperationTracker.java | 68 +++ ...TestPrimaryIndexOperationTrackerFactory.java | 68 +++ .../asterix/test/logging/CheckpointingTest.java | 2 +- .../asterix/test/storage/DiskIsFullTest.java| 2 +- .../multi-partition-test-configuration.xml | 112 .../common/context/DatasetLifecycleManager.java | 25 +- .../lsm/common/api/ILSMIOOperationCallback.java | 1 + .../am/lsm/btree/impl/ITestOpCallback.java | 6 +- .../btree/impl/IVirtualBufferCacheCallback.java | 23 + .../storage/am/lsm/btree/impl/TestLsmBtree.java | 182 +- .../btree/impl/TestLsmBtreeLocalResource.java | 7 + .../btree/impl/TestLsmBtreeSearchCursor.java| 5 +- .../lsm/btree/impl/TestVirtualBufferCache.java | 215 +++ 20 files changed, 1539 insertions(+), 157 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c5a0a197/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java index 72a9b44..352a5f8 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java @@ -69,6 +69,8 @@ import org.apache.asterix.transaction.management.service.logging.LogReader; import org.apache.commons.lang3.tuple.Pair; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.runtime.base.IPushRuntime; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.algebricks.runtime.operators.std.AssignRuntimeFactory; import org.apache.hyracks.algebricks.runtime.operators.std.EmptyTupleSourceRuntimeFactory; import org.apache.hyracks.api.comm.IFrameWriter; import org.apache.hyracks.api.comm.VSizeFrame; @@ -89,6 +91,7 @@ import org.apache.hyracks.api.job.JobSpecification; import org.apache.hyracks.api.util.HyracksConstants; import org.apache.hyracks.dataflow.common.utils.TaskUtil; import org.apache.hyracks.dataflow.std.file.ConstantFileSplitProvider; +import org.apache.hyracks.dataflow.std.file.IFileSplitProvider; import org.apache.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor; import org.apache.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorNodePushable; import org.apache.hyracks.storage.am.common.api.IIndexBuilder; @@ -166,33 +169,93 @@ public class TestNodeController { public Pair getInsertPipeline(IHyracksTaskContext ctx, Dataset dataset, IAType[] primaryKeyTypes,
[1/2] asterixdb git commit: [ASTERIXDB-2161][TEST] Add indexes to MultiPartitionTest
Repository: asterixdb Updated Branches: refs/heads/master f9e6bae98 -> c5a0a1974 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c5a0a197/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTracker.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTracker.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTracker.java new file mode 100644 index 000..e376ff9 --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTracker.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.dataflow; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.asterix.common.context.DatasetInfo; +import org.apache.asterix.common.context.PrimaryIndexOperationTracker; +import org.apache.asterix.common.transactions.ILogManager; +import org.apache.asterix.common.transactions.LogRecord; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.storage.am.lsm.btree.impl.ITestOpCallback; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentIdGenerator; + +public class TestPrimaryIndexOperationTracker extends PrimaryIndexOperationTracker { + +private final Listcallbacks = new ArrayList<>(); + +public TestPrimaryIndexOperationTracker(int datasetID, ILogManager logManager, DatasetInfo dsInfo, +ILSMComponentIdGenerator idGenerator) { +super(datasetID, logManager, dsInfo, idGenerator); +} + +public void addCallback(ITestOpCallback callback) { +synchronized (callbacks) { +callbacks.add(callback); +} +} + +public void clearCallbacks() { +synchronized (callbacks) { +callbacks.clear(); +} +} + +@Override +public void triggerScheduleFlush(LogRecord logRecord) throws HyracksDataException { +synchronized (callbacks) { +for (ITestOpCallback callback : callbacks) { +callback.before(null); +} +} +super.triggerScheduleFlush(logRecord); +synchronized (callbacks) { +for (ITestOpCallback callback : callbacks) { +callback.after(); +} +} +} + +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/c5a0a197/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTrackerFactory.java -- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTrackerFactory.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTrackerFactory.java new file mode 100644 index 000..5d7a7c6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestPrimaryIndexOperationTrackerFactory.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.test.dataflow; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import org.apache.asterix.common.api.INcApplicationContext; +import
[2/3] asterixdb git commit: [ASTERIXDB-2169][STO][TX] Unblock modifications during full scan
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e5a65429/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/AlgebricksMetaOperatorDescriptor.java -- diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/AlgebricksMetaOperatorDescriptor.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/AlgebricksMetaOperatorDescriptor.java index f6ebf19..25a4aea 100644 --- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/AlgebricksMetaOperatorDescriptor.java +++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/AlgebricksMetaOperatorDescriptor.java @@ -78,33 +78,48 @@ public class AlgebricksMetaOperatorDescriptor extends AbstractSingleActivityOper public IOperatorNodePushable createPushRuntime(final IHyracksTaskContext ctx, final IRecordDescriptorProvider recordDescProvider, int partition, int nPartitions) { if (inputArity == 0) { -return createSourceInputPushRuntime(ctx); +return new SourcePushRuntime(ctx); } else { return createOneInputOneOutputPushRuntime(ctx, recordDescProvider); } } -private IOperatorNodePushable createSourceInputPushRuntime(final IHyracksTaskContext ctx) { -return new AbstractUnaryOutputSourceOperatorNodePushable() { +private class SourcePushRuntime extends AbstractUnaryOutputSourceOperatorNodePushable { +private final IHyracksTaskContext ctx; -@Override -public void initialize() throws HyracksDataException { -IFrameWriter startOfPipeline; -RecordDescriptor pipelineOutputRecordDescriptor = -outputArity > 0 ? AlgebricksMetaOperatorDescriptor.this.outRecDescs[0] : null; -PipelineAssembler pa = -new PipelineAssembler(pipeline, inputArity, outputArity, null, pipelineOutputRecordDescriptor); -startOfPipeline = pa.assemblePipeline(writer, ctx); +public SourcePushRuntime(IHyracksTaskContext ctx) { +this.ctx = ctx; +} + +@Override +public void initialize() throws HyracksDataException { +IFrameWriter startOfPipeline; +RecordDescriptor pipelineOutputRecordDescriptor = +outputArity > 0 ? AlgebricksMetaOperatorDescriptor.this.outRecDescs[0] : null; +PipelineAssembler pa = +new PipelineAssembler(pipeline, inputArity, outputArity, null, pipelineOutputRecordDescriptor); +startOfPipeline = pa.assemblePipeline(writer, ctx); +HyracksDataException exception = null; +try { +startOfPipeline.open(); +} catch (Exception e) { +startOfPipeline.fail(); +exception = HyracksDataException.create(e); +} finally { try { -startOfPipeline.open(); -} catch (Exception e) { -startOfPipeline.fail(); -throw e; -} finally { startOfPipeline.close(); +} catch (Exception e) { +if (exception == null) { +exception = HyracksDataException.create(e); +} else { +exception.addSuppressed(e); +} } } -}; +if (exception != null) { +throw exception; +} +} } private IOperatorNodePushable createOneInputOneOutputPushRuntime(final IHyracksTaskContext ctx, http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e5a65429/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java index d64858b..71ddbc0 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java @@ -49,8 +49,8 @@ public class HttpServer { // Constants private static final int LOW_WRITE_BUFFER_WATER_MARK = 8 * 1024; private static final int HIGH_WRITE_BUFFER_WATER_MARK = 32 * 1024; -protected static final WriteBufferWaterMark WRITE_BUFFER_WATER_MARK = new
[3/3] asterixdb git commit: [ASTERIXDB-2169][STO][TX] Unblock modifications during full scan
[ASTERIXDB-2169][STO][TX] Unblock modifications during full scan - user model changes: no - storage format changes: no - interface changes: yes - added ILSMHarness.replaceMemoryComponentsWithDiskComponents details: - During a long running query aka full scan, two things block incoming modifications: 1) Memory component gets full, is flushed but can't be recycled because of the search operation inside the component. 2) Read latches on the memory component not being released and the memory component search cursor is not advancing. The two cases are addressed in this change for the LSMBTree but not yet addressed for other indexes. The proposed solution for case (1) is to poll memory components states every n records during the search operation. If a memory component was found to have been flushed, its cursor is moved to the corresponding disk component allowing the memory component to be recycled. The proposed solution for case (2) is to check memory component cursor every n records. If the cursor has not advanced and the component has writers, then the latches over the leaf page are released, and the cursor re-do the operation entering from the tree root. - Added a test case. - Added performance traces for enter and exit components. Change-Id: I37ba52f6324ed1c5a78465c3a8cbcd351f1ed5bc Reviewed-on: https://asterix-gerrit.ics.uci.edu/2166 Sonar-Qube: JenkinsTested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Reviewed-by: Luo Chen Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/e5a65429 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/e5a65429 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/e5a65429 Branch: refs/heads/master Commit: e5a65429d94c34b3079a3fe6bad206089c2c193c Parents: 76ecc4b Author: Abdullah Alamoudi Authored: Mon Nov 20 17:14:01 2017 -0800 Committer: abdullah alamoudi Committed: Mon Nov 20 21:32:04 2017 -0800 -- .../app/bootstrap/TestNodeController.java | 58 +-- .../test/dataflow/ComponentRollbackTest.java| 94 +++-- .../asterix/test/dataflow/LogMarkerTest.java| 7 +- .../dataflow/MultiPartitionLSMIndexTest.java| 196 ++ .../SearchCursorComponentSwitchTest.java| 266 + .../asterix/test/dataflow/TestDataset.java | 3 +- .../TestLsmBtreeIoOpCallbackFactory.java| 8 +- .../asterix/test/logging/CheckpointingTest.java | 7 +- .../asterix/test/storage/DeallocatableTest.java | 4 +- .../asterix/test/storage/DiskIsFullTest.java| 8 +- .../IndexDropOperatorNodePushableTest.java | 28 +- .../AbstractLSMIOOperationCallback.java | 10 +- ...actOneInputOneOutputOneFramePushRuntime.java | 16 +- .../meta/AlgebricksMetaOperatorDescriptor.java | 49 ++- .../apache/hyracks/http/server/HttpServer.java | 10 +- .../dataflow/ExternalBTreeLocalResource.java| 2 +- .../ExternalBTreeWithBuddyLocalResource.java| 2 +- .../am/lsm/btree/impls/ExternalBTree.java | 27 +- .../lsm/btree/impls/ExternalBTreeOpContext.java | 8 +- .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 26 +- .../impls/ExternalBTreeWithBuddyOpContext.java | 9 +- .../storage/am/lsm/btree/impls/LSMBTree.java| 14 +- .../am/lsm/btree/impls/LSMBTreeOpContext.java | 13 +- .../btree/impls/LSMBTreeRangeSearchCursor.java | 152 +++- .../am/lsm/btree/utils/LSMBTreeUtil.java| 9 +- .../am/lsm/common/api/ILSMComponent.java| 5 + .../storage/am/lsm/common/api/ILSMHarness.java | 13 + .../storage/am/lsm/common/api/ILSMIndex.java| 5 + .../common/api/ILSMIndexOperationContext.java | 26 ++ .../lsm/common/impls/AbstractLSMComponent.java | 7 +- .../common/impls/AbstractLSMDiskComponent.java | 9 +- .../am/lsm/common/impls/AbstractLSMIndex.java | 39 +- .../impls/AbstractLSMIndexOperationContext.java | 42 ++- .../impls/AbstractLSMMemoryComponent.java | 6 + .../impls/ComponentReplacementContext.java | 215 +++ .../am/lsm/common/impls/LSMComponentId.java | 8 +- .../storage/am/lsm/common/impls/LSMHarness.java | 373 +++ .../impls/LSMIndexDiskComponentBulkLoader.java | 2 +- .../common/impls/LSMIndexReplicationJob.java| 2 +- .../lsm/common/impls/LSMIndexSearchCursor.java | 19 +- .../invertedindex/impls/LSMInvertedIndex.java | 14 +- .../impls/LSMInvertedIndexOpContext.java| 11 +- .../ondisk/OnDiskInvertedIndexOpContext.java| 1 + .../dataflow/ExternalRTreeLocalResource.java| 2 +- .../am/lsm/rtree/impls/AbstractLSMRTree.java| 10 +- .../am/lsm/rtree/impls/ExternalRTree.java
[1/3] asterixdb git commit: [ASTERIXDB-2169][STO][TX] Unblock modifications during full scan
Repository: asterixdb Updated Branches: refs/heads/master 76ecc4b19 -> e5a65429d http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e5a65429/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java index b0abeb1..e1d5114 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java @@ -63,6 +63,7 @@ public class LSMHarness implements ILSMHarness { private static final Logger LOGGER = Logger.getLogger(LSMHarness.class.getName()); protected final ILSMIndex lsmIndex; +protected final ComponentReplacementContext componentReplacementCtx; protected final ILSMMergePolicy mergePolicy; protected final ILSMOperationTracker opTracker; protected final AtomicBoolean fullMergeIsRequested; @@ -84,83 +85,97 @@ public class LSMHarness implements ILSMHarness { if (replicationEnabled) { this.componentsToBeReplicated = new ArrayList<>(); } +componentReplacementCtx = new ComponentReplacementContext(lsmIndex); } protected boolean getAndEnterComponents(ILSMIndexOperationContext ctx, LSMOperationType opType, boolean isTryOperation) throws HyracksDataException { -validateOperationEnterComponentsState(ctx); -synchronized (opTracker) { -while (true) { -lsmIndex.getOperationalComponents(ctx); -// Before entering the components, prune those corner cases that indeed should not proceed. -switch (opType) { -case FLUSH: -// if the lsm index does not have memory components allocated, then nothing to flush -if (!lsmIndex.isMemoryComponentsAllocated()) { -return false; -} -ILSMMemoryComponent flushingComponent = (ILSMMemoryComponent) ctx.getComponentHolder().get(0); -if (!flushingComponent.isModified()) { -if (flushingComponent.getState() == ComponentState.READABLE_UNWRITABLE) { -//The mutable component has not been modified by any writer. There is nothing to flush. -//since the component is empty, set its state back to READABLE_WRITABLE only when it's -//state has been set to READABLE_UNWRITABLE - flushingComponent.setState(ComponentState.READABLE_WRITABLE); -opTracker.notifyAll(); - -// Call recycled only when we change it's state is reset back to READABLE_WRITABLE -// Otherwise, if the component is in other state, e.g., INACTIVE, or -// READABLE_UNWRITABLE_FLUSHING, it's not considered as being recycled here. - lsmIndex.getIOOperationCallback().recycled(flushingComponent); +long before = 0L; +if (ctx.isTracingEnabled()) { +before = System.nanoTime(); +} +try { +validateOperationEnterComponentsState(ctx); +synchronized (opTracker) { +while (true) { +lsmIndex.getOperationalComponents(ctx); +// Before entering the components, prune those corner cases that indeed should not proceed. +switch (opType) { +case FLUSH: +// if the lsm index does not have memory components allocated, then nothing to flush +if (!lsmIndex.isMemoryComponentsAllocated()) { +return false; } -return false; -} -if (flushingComponent.getWriterCount() > 0) { -/* - * This case is a case where even though FLUSH log was flushed to disk and scheduleFlush is triggered, - * the current in-memory component (whose state was changed to READABLE_WRITABLE (RW) - * from READABLE_UNWRITABLE(RU) before FLUSH log was written to log tail (which is memory buffer of log file) - * and then the
asterixdb git commit: [NO ISSUE][TX] Fix DatasetLock for Multiple Index Builds
Repository: asterixdb Updated Branches: refs/heads/release-0.9.3-pre-rc ed4b04680 -> 19a2b58c3 [NO ISSUE][TX] Fix DatasetLock for Multiple Index Builds - user model changes: no - storage format changes: no - interface changes: no details: - The mechanism used for allowing multiple concurrent index builds does not work if the first index build finishes before other index builds. It relied on a write lock obtained by the first index builder and released by the last index builder. This is not allowed when using ReentrantReadWriteLock and will lead to an IllegalMonitorStateException since the last thread to exit did not hold the lock. - Potential Deadlock between modify and exclusive modify can happen when an exclusive modify attempts to upgrade the lock to write lock while the modify lock waits for the exclusive lock to release. This has been fixed too. - Test cases were added. Change-Id: I3bea3ff2075d952ab13402b0c445c464b431c0f5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2144 Integration-Tests: JenkinsTested-by: Jenkins Contrib: Jenkins Reviewed-by: Michael Blow Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/19a2b58c Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/19a2b58c Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/19a2b58c Branch: refs/heads/release-0.9.3-pre-rc Commit: 19a2b58c32d56060a8167a2ad69bb942083ba4c1 Parents: ed4b046 Author: Abdullah Alamoudi Authored: Sun Nov 12 17:21:34 2017 -0800 Committer: abdullah alamoudi Committed: Sun Nov 12 22:19:43 2017 -0800 -- .../apache/asterix/app/active/RecoveryTask.java | 5 +- .../asterix/metadata/lock/DatasetLock.java | 111 --- .../metadata/lock/MetadataLockManagerTest.java | 307 +++ 3 files changed, 384 insertions(+), 39 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/19a2b58c/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java -- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java index 29b38ba..0321ae4 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java @@ -134,8 +134,9 @@ public class RecoveryTask { lockManager.acquireActiveEntityWriteLock(metadataProvider.getLocks(), listener.getEntityId().getDataverse() + '.' + listener.getEntityId().getEntityName()); for (Dataset dataset : listener.getDatasets()) { -MetadataLockUtil.modifyDatasetBegin(lockManager, metadataProvider.getLocks(), -dataset.getDataverseName(), DatasetUtil.getFullyQualifiedName(dataset)); + lockManager.acquireDataverseReadLock(metadataProvider.getLocks(), dataset.getDataverseName()); + lockManager.acquireDatasetExclusiveModificationLock(metadataProvider.getLocks(), +DatasetUtil.getFullyQualifiedName(dataset)); } synchronized (listener) { try { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/19a2b58c/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/DatasetLock.java -- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/DatasetLock.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/DatasetLock.java index 31f2089..bc302c2 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/DatasetLock.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/DatasetLock.java @@ -24,23 +24,31 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.common.exceptions.MetadataException; import org.apache.asterix.common.metadata.IMetadataLock; +import org.apache.asterix.common.utils.InterruptUtil; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; public class DatasetLock implements IMetadataLock { private final String key; +// The lock private final ReentrantReadWriteLock lock; -private final ReentrantReadWriteLock dsReadLock; -private final
asterixdb git commit: [NO ISSUE][HYR] Heartbeat processing / NC exceptions
Repository: asterixdb Updated Branches: refs/heads/release-0.9.3-pre-rc e32cb6765 -> ed4b04680 [NO ISSUE][HYR] Heartbeat processing / NC exceptions - Run heartbeat processing off of Worker thread, to prevent starvation - Preserve stacktrace when creating node-scoped HyracksDataException clones Change-Id: If8fd35a7fd488bed5f1d5e2146dd48892cb0a7a4 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2138 Reviewed-by: abdullah alamoudiSonar-Qube: Jenkins Tested-by: Jenkins Contrib: Jenkins Integration-Tests: Jenkins Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/ed4b0468 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/ed4b0468 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/ed4b0468 Branch: refs/heads/release-0.9.3-pre-rc Commit: ed4b04680224ce9209bf417247d6c0424c4dfc3d Parents: e32cb67 Author: Michael Blow Authored: Wed Nov 8 21:12:12 2017 -0500 Committer: abdullah alamoudi Committed: Wed Nov 8 21:31:19 2017 -0800 -- .../hyracks/api/exceptions/HyracksDataException.java | 10 -- .../apache/hyracks/control/cc/ClusterControllerIPCI.java | 3 +-- 2 files changed, 9 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ed4b0468/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java index 4517730..7ae7cbf 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java @@ -38,7 +38,7 @@ public class HyracksDataException extends HyracksException { return (HyracksDataException) cause; } else if (cause instanceof Error) { // don't wrap errors, allow them to propagate -throw (Error)cause; +throw (Error) cause; } else if (cause instanceof InterruptedException && !Thread.currentThread().isInterrupted()) { // TODO(mblow): why not force interrupt on current thread? LOGGER.log(Level.WARNING, @@ -78,6 +78,12 @@ public class HyracksDataException extends HyracksException { super(component, errorCode, message, cause, nodeId, params); } +public HyracksDataException(String component, int errorCode, String message, Throwable cause, String nodeId, +StackTraceElement[] stackTrace, Serializable... params) { +super(component, errorCode, message, cause, nodeId, params); +setStackTrace(stackTrace); +} + /** * @deprecated Error code is needed. */ @@ -141,6 +147,6 @@ public class HyracksDataException extends HyracksException { public static HyracksDataException create(HyracksDataException e, String nodeId) { return new HyracksDataException(e.getComponent(), e.getErrorCode(), e.getMessage(), e.getCause(), nodeId, -e.getParams()); +e.getStackTrace(), e.getParams()); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ed4b0468/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerIPCI.java -- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerIPCI.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerIPCI.java index 350984c..af5c102 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerIPCI.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerIPCI.java @@ -72,8 +72,7 @@ class ClusterControllerIPCI implements IIPCI { break; case NODE_HEARTBEAT: CCNCFunctions.NodeHeartbeatFunction nhf = (CCNCFunctions.NodeHeartbeatFunction) fn; -ccs.getWorkQueue().schedule(new NodeHeartbeatWork(ccs, nhf.getNodeId(), -nhf.getHeartbeatData())); +
[5/5] asterixdb git commit: Merge pre-rc changes to master
Merge pre-rc changes to master Change-Id: I578ffd7ef17784034b14f3c0d23cd5094e39f6e2 Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a0490ba6 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a0490ba6 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a0490ba6 Branch: refs/heads/master Commit: a0490ba6f46f28470052b3cadeec1a60be0f394e Parents: 40cff7b e32cb67 Author: Ian MaxonAuthored: Mon Nov 6 15:41:03 2017 -0800 Committer: Ian Maxon Committed: Mon Nov 6 15:41:03 2017 -0800 -- .../TestLsmBtreeIoOpCallbackFactory.java| 9 +++-- .../common/context/DatasetLifecycleManager.java | 15 .../asterix/common/context/DatasetResource.java | 11 +++--- .../AbstractLSMIOOperationCallback.java | 36 +--- .../LSMBTreeIOOperationCallback.java| 5 +-- .../LSMBTreeIOOperationCallbackFactory.java | 5 +-- .../LSMBTreeWithBuddyIOOperationCallback.java | 5 +++ ...TreeWithBuddyIOOperationCallbackFactory.java | 5 +-- .../LSMInvertedIndexIOOperationCallback.java| 5 +-- ...InvertedIndexIOOperationCallbackFactory.java | 5 +-- .../LSMRTreeIOOperationCallback.java| 5 +-- .../LSMRTreeIOOperationCallbackFactory.java | 5 +-- .../LSMBTreeIOOperationCallbackTest.java| 11 +++--- ...SMBTreeWithBuddyIOOperationCallbackTest.java | 11 +++--- ...LSMInvertedIndexIOOperationCallbackTest.java | 11 +++--- .../LSMRTreeIOOperationCallbackTest.java| 11 +++--- .../am/common/impls/AbstractTreeIndex.java | 5 --- .../dataflow/ExternalBTreeLocalResource.java| 2 +- .../ExternalBTreeWithBuddyLocalResource.java| 2 +- .../btree/dataflow/LSMBTreeLocalResource.java | 4 +-- .../am/lsm/btree/impls/ExternalBTree.java | 12 +++ .../lsm/btree/impls/ExternalBTreeWithBuddy.java | 10 ++ .../storage/am/lsm/btree/impls/LSMBTree.java| 20 +-- .../btree/impls/LSMBTreeMemoryComponent.java| 5 +-- .../impls/LSMBTreeWithBuddyMemoryComponent.java | 9 ++--- .../am/lsm/btree/utils/LSMBTreeUtil.java| 19 ++- .../AbstractLSMWithBuddyMemoryComponent.java| 6 ++-- .../lsm/common/api/ILSMIOOperationCallback.java | 16 - .../api/ILSMIOOperationCallbackFactory.java | 2 +- .../storage/am/lsm/common/api/ILSMIndex.java| 5 +++ .../lsm/common/impls/AbstractLSMComponent.java | 4 ++- .../common/impls/AbstractLSMDiskComponent.java | 4 +-- .../am/lsm/common/impls/AbstractLSMIndex.java | 17 - .../impls/AbstractLSMMemoryComponent.java | 6 ++-- .../BlockingIOOperationCallbackWrapper.java | 10 -- .../storage/am/lsm/common/impls/LSMHarness.java | 13 --- .../impls/NoOpIOOperationCallbackFactory.java | 12 +-- .../common/impls/StubIOOperationCallback.java | 20 +++ .../lsm/common/impls/ThreadCountingTracker.java | 2 +- .../dataflow/LSMInvertedIndexLocalResource.java | 12 +++ .../invertedindex/impls/LSMInvertedIndex.java | 11 +++--- .../impls/LSMInvertedIndexMemoryComponent.java | 8 ++--- .../impls/PartitionedLSMInvertedIndex.java | 14 .../inmemory/InMemoryInvertedIndex.java | 5 --- .../ondisk/OnDiskInvertedIndex.java | 5 --- .../invertedindex/util/InvertedIndexUtils.java | 22 ++-- .../dataflow/ExternalRTreeLocalResource.java| 2 +- .../rtree/dataflow/LSMRTreeLocalResource.java | 4 +-- .../LSMRTreeWithAntiMatterLocalResource.java| 4 +-- .../am/lsm/rtree/impls/AbstractLSMRTree.java| 14 .../am/lsm/rtree/impls/ExternalRTree.java | 13 +++ .../storage/am/lsm/rtree/impls/LSMRTree.java| 16 + .../rtree/impls/LSMRTreeMemoryComponent.java| 8 ++--- .../impls/LSMRTreeWithAntiMatterTuples.java | 7 ++-- .../am/lsm/rtree/utils/LSMRTreeUtils.java | 27 --- .../apache/hyracks/storage/common/IIndex.java | 7 ++-- .../am/lsm/btree/LSMBTreeBulkLoadTest.java | 4 +-- .../am/lsm/btree/LSMBTreeDeleteTest.java| 4 +-- .../am/lsm/btree/LSMBTreeExamplesTest.java | 2 +- .../am/lsm/btree/LSMBTreeFileManagerTest.java | 8 ++--- .../am/lsm/btree/LSMBTreeFilterMergeTest.java | 4 +-- .../btree/LSMBTreeFilterMergeTestDriver.java| 3 +- .../am/lsm/btree/LSMBTreeInsertTest.java| 4 +-- .../am/lsm/btree/LSMBTreeLifecycleTest.java | 4 +-- .../storage/am/lsm/btree/LSMBTreeMergeTest.java | 4 +-- .../am/lsm/btree/LSMBTreeMergeTestDriver.java | 3 +- ...MBTreeModificationOperationCallbackTest.java | 9 +++-- .../am/lsm/btree/LSMBTreeMultiBulkLoadTest.java | 4 +-- .../btree/LSMBTreeScanDiskComponentsTest.java | 15 .../LSMBTreeSearchOperationCallbackTest.java| 2 +- ...TreeUpdateInPlaceScanDiskComponentsTest.java | 11 +++---