8000 Feature/aql subquery execution block impl execute implementation by mchacki · Pull Request #10606 · arangodb/arangodb · GitHub
[go: up one dir, main page]

Skip to content

Feature/aql subquery execution block impl execute implementation #10606

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

mchacki
Copy link
Member
@mchacki mchacki commented Dec 2, 2019

First implementation to pass through the AqlCall stacks.

This branch has an issue with profiles, as we do overfetch now, if we do precise fetching, other profiler tests fail.
We need to discuss hardLimit propagation as this would avoid the overmatching issues.

mchacki and others added 30 commits October 22, 2019 16:43
…ExecutionBlockImpl (not complete, only skip path) everything compiles, but is not tested
…pose a DataRange, this might not be the correct one every where
…y and SingleRowFetcher. Both untested and yet incomplete, they will only work for MVP.
…/arangodb/ArangoDB into feature/AqlSubqueryOperationsStack
…ough. This state is broken in the sense that a server does not boot with it and catch tests are broken
…/arangodb/ArangoDB into feature/AqlSubqueryOperationsStack
…e locally green, however there is at least one query still red (on ShadowRows)
…/arangodb/ArangoDB into feature/AqlSubqueryOperationsStack
…re/AqlSubqueryExecutionBlockImplExecuteImplementation
markuspf and others added 17 commits February 29, 2020 08:16
* Move ModificationExecutors to new interface

* added inputRange method to inputMatrix class, added switch between
DataRange Input <-> Matrix for ModificationExecutors

* forgot to enable allrows modification executor in fastForwardType

*  removed obsolete comment

*  removed obsolete comment

Co-authored-by: Heiko <hkernbach@users.noreply.github.com>
Co-authored-by: Michael Hackstein <michael@arangodb.com>
* removed obsolete comment, added produceRows and skipRowsRange, enabled
MaterializeExecutor as newStyleExecutor

* forgot to use advanceRow, fetch input during skipRowsRange

* removed old implementations

* removed comment, fixed a logical loop error

* skip could be simplified as well

* temp workaround

Co-authored-by: Michael Hackstein <michael@arangodb.com>
* Clarified comment

* Updated comment

* Added two static strings

* Avoid unintentional streaming operator of string_view as a container

* Added parser for execute rest call

* Fixed ambiguous overload in ResultT

* Added execute and executeForClient to ExecutionEngine

* Implemented executeForClient in RestAqlHandler

* Add default value

* Updated comment

* Changed error attribute

* Added API toggle to RemoteExecutor

* Fixed compile error

* Fixed duplicate log id

* Try to make MSVC work

* Moved AqlExecuteResult to a separate file

* Moved AqlExecuteResult to a separate file

* Implemtented execute in Remote; except for (de)serialization, which is still missing

* Tried to fix MSVC compile error

* Revert "Tried to fix MSVC compile error"

This reverts commit f6f43b2.

* Next try to fix MSVC

* Implemented (de)serialization for RemoteExecutor::execute

* Fixes

* Added minimal AqlCall (de)serialization tests

* Bugfix

* Added minimal (de)serialization tests for AqlCallStack and AqlExecuteResult

* Fixed test

* Changed Serialization format a little

* Bugfix

* Initialize SingletonBlock immediately with an empty row

* Revert "Next try to fix MSVC"

This reverts commit 528c4c7.

* Revert "Try to make MSVC work"

This reverts commit ba7d9c0.

* Work around MSVC shortcoming

* Work around MSVC shortcoming

* Attempt to fix windows compile issue

Co-authored-by: Michael Hackstein <michael@arangodb.com>
…uery executor (#11196)

* Intermediate commit, does not compile.

* New style for SubqueryExecutor.

* Removed bad assert.

* Reset subsqueryInitialised in skip.

Co-authored-by: Michael Hackstein <michael@arangodb.com>
…t collect (#11172)

* Move SubqueryStartExecutor to new interface

* Diddle

* Tests pass for SubqueryStartExecutor

* Delete most of the SubqueryEndExecutor tests

They are irrelevant now as they only tested shadowrow behaviour.

Shadow Rows are now handled by ExecutionBlockImpl.

* Skeleton tests

* Junk

* Cleanup and make work

* Tweak ExecutorTestHelper to test pipelines

* SubqueryStart/SubqueryEnd

* Blafummel.

* Modifications

* Fixup tests

* Address some comments

* Fix.

* Fix tests

* Various fixes.

* Made the branch compile on Mac

* Intermediate commit, does not compile, required for merge

* Fixed one of the SplicedSubqueryTests

* Seperated ShadowRow handling for SubqueryStart/End executors to get a better overview and understanding on how it should behave.

* Allow to use a fullCallStack in ExecutorTestHelper.

* Added asserts on SubqueryEnd that is not allowed to be called with Skipped from upstream

* Use AqlTestCase in SubqueryStartExecutorTest. Transformed first test to TestHelper pipeline

* Let ExecutorTestHelper also test for shadowRows

* Adapted SingleInput=>Data+Shadow test to testing Helepr and make it pass

* Transformed existing SubqueryStart tests to Helper, fixed a test where there was no place for the ShadowRow to be written

* Fixed Skip in SubqueryStartExecutor

* Allow the Pipeline to add Consumer and dependency without fiddling with the Deque from outside

* Added Skip adn ShadowRowForwarding tests to SubqueryStartExecutor

* Fixed fullCount of SubqueryStart to be called properly.

* Renamed isModificationSubquery -> isModificatioNode again

* Consume more than one subquery en-block

* Fixed debugReporting in SplicedSubqueryTest. Disabled the skip in subquery tests for now

* Removed AQL debug log level from testing config

* First version of Subquery Skip bypassing. Including 1 passing test.

* Added disabled tests for skip, and proposed to do it later

* Fixed reporting of FILTERED in fullCount of EnumerateCollectionExecutor

* Enable calculationExecutor execute interface

* Fixed compile issues

* To Velocypack the modification Subquery value

* Fixed illegal assert and reactivated failure tests

* Fixed compile issue

* Deactivated Calculation again

* Added a testSuite for countCollectExecutor

* Fixed Subquery Test for CountCollect

* Added CountCollectImplementation

* Added Compatibility Mode to AqlCallStack

* Removed IdExecutor<void> the only feature it has can be moved into IDexecutor in general. This still has to be done

* When falling back in BlocksWithClients use compatibility stack

* Fixed EnumerateCollectionExecutor

* Fixed fullCountBehaviour of EnumerateList. Also removed a unlimited,fullCount combination in IndexExecutor

* Fixed endless loop while skipAl in OperationCursor

* Fixed View Executor, which sends a no-limit no-offset upstream.

* Fixed forwarding in NoResultsExecutor

Co-authored-by: Markus Pfeiffer <markuspf@users.noreply.github.com>
… bugfixes (#11201)

* Fixed range-handling for Modification Executors

* DataRange handling in ModificationExecutor

* Honor batch-size defined by UpstreamExecutor

* Fixed compile issue

* More fixes in modification

* Remvoed log devel

* Fixed profiler Test. for NoResults node we cahnge the behaviour

* Activated getSome failure tests in ExecuteRestHandler

* Fixed skipping in Index

* Let the MultiDependencySingleROwFetcher return the correct states.

* Fixed non-maintainer compilation

* Attempt to fix windows compile issue

* Fixed the non-maintainer compile ina different way

* Allow waiting within old-style subquery

* Fixed invalid skipRwos in unsorted gather

* Added some Assertions in MultiAqlItemBlockInputRange

* Initialize dependdencies of MultiDependencyFetcher

* Fixed skipRows loop in UnsortingGatherNode

* Fixed return state of GatherNode
…instead of cloneValueInto (#11213)

* Fix memory leak in traversal

* Use move instead of clone for AqlValues
…er executors (#11202)

* Fixed range-handling for Modification Executors

* DataRange handling in ModificationExecutor

* Honor batch-size defined by UpstreamExecutor

* Fixed compile issue

* More fixes in modification

* Remvoed log devel

* Fixed profiler Test. for NoResults node we cahnge the behaviour

* Activated getSome failure tests in ExecuteRestHandler

* Fixed skipping in Index

* Let the MultiDependencySingleROwFetcher return the correct states.

* Fixed non-maintainer compilation

* Attempt to fix windows compile issue

* Fixed the non-maintainer compile ina different way

* Added API in MultiAqlItemBlockInputRange to get Number of dependencies

* Comments

* Savepoint commit, does not compile, but no harm is done. Will start breaking things now

* Another savepoint commit. does not compile, yet.

* First draft of new Style SortingGather not yet implemented: Parallelism this needs to be handled in ExecutionBlockImpl now.

* Allow waiting within old-style subquery

* Fixed invalid skipRwos in unsorted gather

* First draft of ParallelUnsortedGatherExecutor

* Removed unused local variables

* Added some Assertions in MultiAqlItemBlockInputRange

* Initialize dependdencies of MultiDependencyFetcher

* Fixed skipRows loop in UnsortingGatherNode

* Fixed return state of GatherNode

* Added an assertion before accessing a vectir unbounded
* Fixed range-handling for Modification Executors

* DataRange handling in ModificationExecutor

* Honor batch-size defined by UpstreamExecutor

* Fixed compile issue

* More fixes in modification

* Remvoed log devel

* Fixed profiler Test. for NoResults node we cahnge the behaviour

* Activated getSome failure tests in ExecuteRestHandler

* Fixed skipping in Index

* Let the MultiDependencySingleROwFetcher return the correct states.

* Fixed non-maintainer compilation

* Attempt to fix windows compile issue

* Fixed the non-maintainer compile ina different way

* Added API in MultiAqlItemBlockInputRange to get Number of dependencies

* Comments

* Savepoint commit, does not compile, but no harm is done. Will start breaking things now

* Another savepoint commit. does not compile, yet.

* First draft of new Style SortingGather not yet implemented: Parallelism this needs to be handled in ExecutionBlockImpl now.

* Allow waiting within old-style subquery

* Fixed invalid skipRwos in unsorted gather

* First draft of ParallelUnsortedGatherExecutor

* Removed unused local variables

* Added some Assertions in MultiAqlItemBlockInputRange

* Initialize dependdencies of MultiDependencyFetcher

* Fixed skipRows loop in UnsortingGatherNode

* Fixed return state of GatherNode

* Added an assertion before accessing a vectir unbounded

* Fixed uninitialized member in DistributeExecutor

* Fixed use before vector initialization in SortingGather

* Fixed uninitialized dependencies in MultiDepRowFetcher

* First step towards parallel Aql

* Fixed an assertion

* Fixed upstream skipping in ParallelUnsortedGather

Co-authored-by: Michael Hackstein <michael@arangodb.com>
* Fixed range-handling for Modification Executors

* DataRange handling in ModificationExecutor

* Honor batch-size defined by UpstreamExecutor

* Fixed compile issue

* More fixes in modification

* Remvoed log devel

* Fixed profiler Test. for NoResults node we cahnge the behaviour

* Activated getSome failure tests in ExecuteRestHandler

* Fixed skipping in Index

* Let the MultiDependencySingleROwFetcher return the correct states.

* Fixed non-maintainer compilation

* Attempt to fix windows compile issue

* Fixed the non-maintainer compile ina different way

* Added API in MultiAqlItemBlockInputRange to get Number of dependencies

* Comments

* Savepoint commit, does not compile, but no harm is done. Will start breaking things now

* Another savepoint commit. does not compile, yet.

* First draft of new Style SortingGather not yet implemented: Parallelism this needs to be handled in ExecutionBlockImpl now.

* Allow waiting within old-style subquery

* Fixed invalid skipRwos in unsorted gather

* First draft of ParallelUnsortedGatherExecutor

* Removed unused local variables

* Added some Assertions in MultiAqlItemBlockInputRange

* Initialize dependdencies of MultiDependencyFetcher

* Fixed skipRows loop in UnsortingGatherNode

* Fixed return state of GatherNode

* Added an assertion before accessing a vectir unbounded

* Fixed uninitialized member in DistributeExecutor

* Fixed use before vector initialization in SortingGather

* Fixed uninitialized dependencies in MultiDepRowFetcher

* First step towards parallel Aql

* Fixed an assertion

* Fixed upstream skipping in ParallelUnsortedGather

* [WIP] Changed Api for MultiDepExecutors in ExecBlockImpl (not yet in the actual executors)

* Moved AqlCallSet into a separate file

* Changed SortingGather to use the new API

* Changed ParallelUnsortedGather to use the new API

* Changed UnsortedGather to use the new API

* Moved AqlCall operator<< into .cpp file

* Implement operator<< for AqlCallSet

* Fix boolean mix-up

* Fixed state machine: go to UPSTREAM when the AqlCallSet is not empty

* Fixed assertion

* Bugfix

* SortingGather bugfixes

* Added init() method to fix an assertion and cleanup

* Removed unused variable

* Fixed constrained sort

* Fixed constrained sort #2

* Fix boolean mix-up

* Remove old interface

* Use call parameter for upstream request in produceRows

* Remove more old interface code

* Add skip methods to MultiAqlItemBlockInputRange

* Skip in UnsortedGather

* skip for UnsortedGather

* Fix skip and upstream calls for UnsortedGather

* skipRowsRange change

* Remove useless comments

* Moved multi-dep related code from ExeBlockImpl to MultiFetcher

* Cleanup in SortingGather, implemented parallel fullCount

* Try to fix a windows compile error

* Simplify and extend skipRowsRange for UnsortedGatherExecutor

* Made ParallelUnsortedGather actually parallel

* Removed erroneous assertion

* Undid erroneous change

* Fixed MacOs compile. Also disabled tests for non-relevant AqlCallStacks. They will be removed

* Fixed initialize Cursor for multi dependency blocks

* Fixed fullCount case in parallel unsorted gather

* Fixed fullCount upstream call of ParallelUnsortedGatherExecutor

* Fixed fullCount in SortingGather

* Windows \o/ if you cannot work properly with constexpr and static asserts, we do not let you do it!

* Do not advance in Unsorted gather if there are still rows to skip

* Add more comparison operators for AqlCall limits

* Send clientCall limits to upstream in SortingGather

* Improved fullCount in SortingGatherExectur

* Disabled a cluster profile test. We now ask the RemoteNode more often if it already has data. It is a bit unclear to me if this is now better performance wise (<< i think so) or triggers undesired side effects

* Helpless attempt to work around issues in stonage Visual Studio Compiler we are using.

* Clearly adding an operator on a well defined type causes ambigousness on random basic types using the operator

Co-authored-by: Michael Hackstein <michael@arangodb.com>
Co-authored-by: Markus Pfeiffer <markus@arangodb.com>
…ss skip (#11203)

* Fixed range-handling for Modification Executors

* DataRange handling in ModificationExecutor

* Honor batch-size defined by UpstreamExecutor

* Fixed compile issue

* More fixes in modification

* Remvoed log devel

* Fixed profiler Test. for NoResults node we cahnge the behaviour

* Activated getSome failure tests in ExecuteRestHandler

* Fixed skipping in Index

* Let the MultiDependencySingleROwFetcher return the correct states.

* Fixed non-maintainer compilation

* Attempt to fix windows compile issue

* Fixed the non-maintainer compile ina different way

* Added API in MultiAqlItemBlockInputRange to get Number of dependencies

* Comments

* Savepoint commit, does not compile, but no harm is done. Will start
57AE
 breaking things now

* Another savepoint commit. does not compile, yet.

* First draft of new Style SortingGather not yet implemented: Parallelism this needs to be handled in ExecutionBlockImpl now.

* Allow waiting within old-style subquery

* Fixed invalid skipRwos in unsorted gather

* First draft of ParallelUnsortedGatherExecutor

* Removed unused local variables

* Added some Assertions in MultiAqlItemBlockInputRange

* Initialize dependdencies of MultiDependencyFetcher

* Fixed skipRows loop in UnsortingGatherNode

* Added an implementation for a SkipResult, in order to simplify exchange of it.

* Moved production API -> SkipResult

* Made tests compile with new SkipResult

* Added a test using skip and limit on subqueries

* Prepared to use subqueries in SkipResult

* Let subqueries modify the SkipResult subquery stack

* Fixed return state of GatherNode

* Activate all spliced subquery tests \o/

* Let SubqueryEnd honor the client request

* Added a Maintainer only test for the stack, if it is 36 compatible

* Added first part of side-effect executors. They now send upstream a fetch-all stack. Need to fix downstream reporting, and call the executor with hardLimit 0

* Add a fake FASTFORWARD call into a subquery-skipped ModificationExecutor.

* Added helper shadow row function for SideEffect executors

* Let the Modification Executor also produce data, even if no FullCount is used.

* Revert "Let the Modification Executor also produce data, even if no FullCount is used."

This reverts commit b1c6af5.

* Revert "Revert "Let the Modification Executor also produce data, even if no FullCount is used.""

This reverts commit ac94ae3.

* Implemented proper fastForwarding and skipReporting in ExecutorsWithSideEffects.

* Removed unreachable code, somehow the G++ in our tests tries to comile it and fails now.

* noexcept -> throw is nono good. Thank you compiler for helping me here \o/

* Implment copy on SkipResult

* Adapted SubqueryStartTest to allow easy testing for Skipping on outer levels.

* Fixed koenig lookup of SkipResult ostream operator

* Removed special case of SubqueryStartExecutor and include it on the handling for SideEffect Executors

* Sorry needed to make the _operations vector mutual because of 3.6 compatibility

* Attempt to fix windows compile issue

* Fixed behvaiour of SubqueryEndExecutor

* Another windows attempt

* Fixed modify test, which would actually iterate over too many documents if the LIMIT does not LIMIT the executed modification operations anymore.

* Fixed tests that assert on existence of SubqueryNode, now there will be SubqueryStartNode!

* Consider a hardLimitFastForward inside the Callstack like a needToSkipSubquery. But do not report the skipping of it.

* Fixed all tests that are related to subqueries, which now need to assert spliced queries.

* Fixed jslint

* Fixed the callstack that has been seperated from the clientCall. In some places it was not handled correctly.

* Fixed skip result forwarding in Scatter/Gather

* Fixed assertion if the ConstFetcher gets a block with subquery level skip injected

* Moved merging of SubquerySkips in MultiDependencies into the Fetcher

* Removed dead code and fixed overproduction of Rows in Subquery Executor

* Fixed bypassing of skip in SideEffect executors if they trigger waiting at some point

* Refactored old SubqueryExecutor, there has been some issue with WAITING within the cluster.

* Removed debug logging in test

* Fixed empty subquery executor

* Added an assertion in the AqlResult that no invalid block tries to be serialized

* Added clientId into profile tracing. Fixed return of invalid blocks in blocks with client

* Removed invalid AqlExecuteResult from Test

* Update tests/Aql/SubqueryStartExecutorTest.cpp

Co-Authored-By: Tobias Gödderz <tobias@arangodb.com>

* Fixed comment, thanks to reviewer

Co-authored-by: Tobias Gödderz <tobias@arangodb.com>
* Add some FilterExecutor tests

* Calculation executor tests

* Some more testcode

* Add NoneEntry for EntryBuilder

* Add some tests for CalculationExecutor

Co-authored-by: Michael Hackstein <michael@arangodb.com>
@mchacki
Copy link
Member Author
mchacki commented Mar 13, 2020

@mchacki mchacki changed the base branch from feature/AqlSubqueryOperationsStack to devel March 13, 2020 10:30
@mchacki
Copy link
Member Author
mchacki commented Mar 13, 2020

This branch has been created by multiple subbranches, which have been reviewed individually.
No further review required.

@mchacki mchacki merged commit 3b922bc into devel Mar 13, 2020
@mchacki mchacki deleted the feature/AqlSubqueryExecutionBlockImplExecuteImplementation branch March 13, 2020 15:05
ObiWahn added a commit that referenced this pull request Mar 16, 2020
…-fix/validation-fixes-and-improvements

* 'devel' of https://github.com/arangodb/arangodb: (25 commits)
  Do not instantiate snipped if not collection is found on the server. (#11281)
  Add entries related to search features in 3.7
  fix bug (#11279)
  Docs: Add DocuBlocks for document validation. (#11228)
  Feature/ngram similarity function (#11276)
  Fixed production check, removed assertion (#11273)
  fix compile warning
  Cluster Metrics (#11234)
  Feature/satellite graphs (#11015)
  fix newly created supervision bug with incremental updates (#11269)
  remove useless std::cout output
  fix yet more compile warnings
  Implement memory detection override. (#11268)
  implement a global deadline when running testcode in the local arangosh (#11123)
  Encryption key rotation (#11080)
  fix compile warnings
  fix compile warnings
  Feature/aql subquery execution block impl execute implementation (#10606)
  missing metrics (#10625)
  Bug fix/supervision server cleanup (#11187)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants
0