Hello,
I'm running this mongo query on the 1.20.0-SNAPSHOT build. It runs without
error on the 1.19 release.
SELECT `Elements_Efforts`.`EffortTypeName` AS `EffortTypeName`,
`Elements`.`ElementSubTypeName` AS `ElementSubTypeName`,
`Elements`.`ElementTypeName` AS `ElementTypeName`,
`Elements`.`PlanID` AS `PlanID`
FROM `mongo.grounds`.`Elements` `Elements`
INNER JOIN `mongo.grounds`.`Elements_Efforts` `Elements_Efforts` ON
(`Elements`.`_id` = `Elements_Efforts`.`_id`)
WHERE (`Elements`.`PlanID` = '1623263140')
GROUP BY `Elements_Efforts`.`EffortTypeName`,
`Elements`.`ElementSubTypeName`,
`Elements`.`ElementTypeName`,
`Elements`.`PlanID`
The error message returned is:
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
UnsupportedOperationException: Map, Array, Union or repeated scalar type
should not be used in group by, order by or in a comparison operator. Drill
does not support compare between MAP:REQUIRED and MAP:REQUIRED.
Fragment: 0:0
Please, refer to logs for more information.
[Error Id: 21b3260d-9ebf-4156-a5fa-4748453b5465 on localhost:31010]
I've tried searching the mailing list archives, as well as googling the
error. The stack trace mentions that memory was leaked by the query. Any
ideas? Full stack trace attached.
2022-01-30 20:11:31,022 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:foreman] INFO
o.a.drill.exec.work.foreman.Foreman - Query text for query with id
1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9 issued by clarkddc: SELECT
`Elements_Efforts`.`EffortTypeName` AS `EffortTypeName`,
`Elements`.`ElementSubTypeName` AS `ElementSubTypeName`,
`Elements`.`ElementTypeName` AS `ElementTypeName`,
`Elements`.`PlanID` AS `PlanID`
FROM `mongo.grounds`.`Elements` `Elements`
INNER JOIN `mongo.grounds`.`Elements_Efforts` `Elements_Efforts` ON
(`Elements`.`_id` = `Elements_Efforts`.`_id`)
WHERE (`Elements`.`PlanID` = '1623263140')
GROUP BY `Elements_Efforts`.`EffortTypeName`,
`Elements`.`ElementSubTypeName`,
`Elements`.`ElementTypeName`,
`Elements`.`PlanID`
2022-01-30 20:11:31,027 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:foreman] INFO
o.a.d.e.s.mongo.MongoStoragePlugin - Created connection to
[address=localhost:27017, user=web-user].
2022-01-30 20:11:31,027 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:foreman] INFO
o.a.d.e.s.mongo.MongoStoragePlugin - Number of open connections 1.
2022-01-30 20:11:31,052 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:foreman] WARN
o.a.d.e.s.m.s.MongoSchemaFactory - Failure while getting collection names from
'admin'. Command failed with error 13 (Unauthorized): 'not authorized on admin
to execute command { listCollections: 1, cursor: {}, nameOnly: true, $db:
"admin", $clusterTime: { clusterTime: Timestamp(1643591483, 1), signature: {
hash: BinData(0, 8771EAE8B25C13BD9E0389421C04BECD6319C1CF), keyId:
7034735910600048641 } }, lsid: { id:
UUID("6ead16a1-e094-42b4-9adb-611468dbcd9b") } }' on server localhost:27017.
The full response is {"operationTime": {"$timestamp": {"t": 1643591483, "i":
1}}, "ok": 0.0, "errmsg": "not authorized on admin to execute command {
listCollections: 1, cursor: {}, nameOnly: true, $db: \"admin\", $clusterTime: {
clusterTime: Timestamp(1643591483, 1), signature: { hash: BinData(0,
8771EAE8B25C13BD9E0389421C04BECD6319C1CF), keyId: 7034735910600048641 } },
lsid: { id: UUID(\"6ead16a1-e094-42b4-9adb-611468dbcd9b\") } }", "code": 13,
"codeName": "Unauthorized", "$clusterTime": {"clusterTime": {"$timestamp":
{"t": 1643591483, "i": 1}}, "signature": {"hash": {"$binary": {"base64":
"h3Hq6LJcE72eA4lCHAS+zWMZwc8=", "subType": "00"}}, "keyId":
7034735910600048641}}}
2022-01-30 20:26:34,471 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.s.m.MongoScanBatchCreator - Number of record readers initialized : 1
2022-01-30 20:26:34,488 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.s.m.MongoScanBatchCreator - Number of record readers initialized : 1
2022-01-30 20:26:34,520 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested AWAITING_ALLOCATION --> RUNNING
2022-01-30 20:26:34,520 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.f.FragmentStatusReporter - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State to report: RUNNING
2022-01-30 20:26:35,653 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] ERROR
o.a.d.e.physical.impl.BaseRootExec - Batch dump started: dumping last 2 failed
batches
2022-01-30 20:26:35,653 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] ERROR
o.a.d.e.p.i.xsort.ExternalSortBatch - ExternalSortBatch[schema=BatchSchema
[fields=[[`EffortTypeID` (VARCHAR:OPTIONAL)], [`EffortTypeName`
(VARCHAR:OPTIONAL)], [`EffortSubTypeID` (VARCHAR:OPTIONAL)],
[`EffortSubTypeName` (VARCHAR:OPTIONAL)], [`CrewTypeID` (VARCHAR:OPTIONAL)],
[`CrewType` (VARCHAR:OPTIONAL)], [`Unit` (VARCHAR:OPTIONAL)], [`MaterialID`
(VARCHAR:OPTIONAL)], [`EquipmentID` (VARCHAR:OPTIONAL)], [`Equipment`
(VARCHAR:OPTIONAL)], [`MinutesPerUnit` (VARCHAR:OPTIONAL)], [`Frequency`
(MAP:REQUIRED), children=([`Jan` (VARCHAR:OPTIONAL)], [`Feb`
(VARCHAR:OPTIONAL)], [`Mar` (VARCHAR:OPTIONAL)], [`Apr` (VARCHAR:OPTIONAL)],
[`May` (VARCHAR:OPTIONAL)], [`Jun` (VARCHAR:OPTIONAL)], [`Jul`
(VARCHAR:OPTIONAL)], [`Aug` (VARCHAR:OPTIONAL)], [`Sep` (VARCHAR:OPTIONAL)],
[`Oct` (VARCHAR:OPTIONAL)])], [`_id` (MAP:REQUIRED), children=([`$oid`
(VARCHAR:OPTIONAL)])], [`Material` (VARCHAR:OPTIONAL)]], selectionVector=NONE],
sortState=LOAD, sortConfig=SortConfig[spillFileSize=268435456,
spillBatchSize=1048576, mergeBatchSize=16777216, mSortBatchSize=65535],
outputWrapperContainer=org.apache.drill.exec.record.VectorContainer@9033b9c[recordCount
= 0, schemaChanged = false, schema = BatchSchema [fields=[],
selectionVector=NONE], wrappers = [], ...],
outputSV4=SelectionVector4[data=DrillBuf[1], udle: [1 0..0], recordCount=0,
start=0, length=0],
container=org.apache.drill.exec.record.VectorContainer@7a1bcf10[recordCount =
0, schemaChanged = false, schema = BatchSchema [fields=[[`EffortTypeID`
(VARCHAR:OPTIONAL)], [`EffortTypeName` (VARCHAR:OPTIONAL)], [`EffortSubTypeID`
(VARCHAR:OPTIONAL)], [`EffortSubTypeName` (VARCHAR:OPTIONAL)], [`CrewTypeID`
(VARCHAR:OPTIONAL)], [`CrewType` (VARCHAR:OPTIONAL)], [`Unit`
(VARCHAR:OPTIONAL)], [`MaterialID` (VARCHAR:OPTIONAL)], [`EquipmentID`
(VARCHAR:OPTIONAL)], [`Equipment` (VARCHAR:OPTIONAL)], [`MinutesPerUnit`
(VARCHAR:OPTIONAL)], [`Frequency` (MAP:REQUIRED), children=([`Jan`
(VARCHAR:OPTIONAL)], [`Feb` (VARCHAR:OPTIONAL)], [`Mar` (VARCHAR:OPTIONAL)],
[`Apr` (VARCHAR:OPTIONAL)], [`May` (VARCHAR:OPTIONAL)], [`Jun`
(VARCHAR:OPTIONAL)], [`Jul` (VARCHAR:OPTIONAL)], [`Aug` (VARCHAR:OPTIONAL)],
[`Sep` (VARCHAR:OPTIONAL)], [`Oct` (VARCHAR:OPTIONAL)])], [`_id`
(MAP:REQUIRED), children=([`$oid` (VARCHAR:OPTIONAL)])], [`Material`
(VARCHAR:OPTIONAL)]], selectionVector=NONE], wrappers =
[org.apache.drill.exec.vector.NullableVarCharVector@440359d2[field =
[`EffortTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@659e105c[field =
[`EffortTypeName` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@75d118a8[field =
[`EffortSubTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@51162a4d[field =
[`EffortSubTypeName` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@f052474[field =
[`CrewTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@1a8cd938[field = [`CrewType`
(VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@67e59699[field = [`Unit`
(VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@7419c6a[field =
[`MaterialID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@21c12e72[field =
[`EquipmentID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@5df8766b[field =
[`Equipment` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@16e27213[field =
[`MinutesPerUnit` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.complex.MapVector@1dcb1e69,
org.apache.drill.exec.vector.complex.MapVector@3551011c,
org.apache.drill.exec.vector.NullableVarCharVector@2b8472f3[field = [`Material`
(VARCHAR:OPTIONAL)], ...]], ...]]
2022-01-30 20:26:35,654 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] ERROR
o.a.d.e.p.i.s.RemovingRecordBatch -
RemovingRecordBatch[container=org.apache.drill.exec.record.VectorContainer@2ef3ef7a[recordCount
= 0, schemaChanged = false, schema = BatchSchema [fields=[[`EffortTypeID`
(VARCHAR:OPTIONAL)], [`EffortTypeName` (VARCHAR:OPTIONAL)], [`EffortSubTypeID`
(VARCHAR:OPTIONAL)], [`EffortSubTypeName` (VARCHAR:OPTIONAL)], [`CrewTypeID`
(VARCHAR:OPTIONAL)], [`CrewType` (VARCHAR:OPTIONAL)], [`Unit`
(VARCHAR:OPTIONAL)], [`MaterialID` (VARCHAR:OPTIONAL)], [`EquipmentID`
(VARCHAR:OPTIONAL)], [`Equipment` (VARCHAR:OPTIONAL)], [`MinutesPerUnit`
(VARCHAR:OPTIONAL)], [`Frequency` (MAP:REQUIRED), children=([`Jan`
(VARCHAR:OPTIONAL)], [`Feb` (VARCHAR:OPTIONAL)], [`Mar` (VARCHAR:OPTIONAL)],
[`Apr` (VARCHAR:OPTIONAL)], [`May` (VARCHAR:OPTIONAL)], [`Jun`
(VARCHAR:OPTIONAL)], [`Jul` (VARCHAR:OPTIONAL)], [`Aug` (VARCHAR:OPTIONAL)],
[`Sep` (VARCHAR:OPTIONAL)], [`Oct` (VARCHAR:OPTIONAL)])], [`_id`
(MAP:REQUIRED), children=([`$oid` (VARCHAR:OPTIONAL)])], [`Material`
(VARCHAR:OPTIONAL)]], selectionVector=NONE], wrappers =
[org.apache.drill.exec.vector.NullableVarCharVector@6b0e849b[field =
[`EffortTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@566a2107[field =
[`EffortTypeName` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@5e71c2d3[field =
[`EffortSubTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@6f486e58[field =
[`EffortSubTypeName` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@70fd1576[field =
[`CrewTypeID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@77187077[field = [`CrewType`
(VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@272f431d[field = [`Unit`
(VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@b39d30e[field =
[`MaterialID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@137721ba[field =
[`EquipmentID` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@2758706b[field =
[`Equipment` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.NullableVarCharVector@7a32f836[field =
[`MinutesPerUnit` (VARCHAR:OPTIONAL)], ...],
org.apache.drill.exec.vector.complex.MapVector@3f56e5dd,
org.apache.drill.exec.vector.complex.MapVector@1586697c,
org.apache.drill.exec.vector.NullableVarCharVector@7139888f[field = [`Material`
(VARCHAR:OPTIONAL)], ...]], ...], state=NOT_FIRST,
copier=org.apache.drill.exec.physical.impl.svremover.StraightCopier@1ca72dd6]
2022-01-30 20:26:35,654 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] ERROR
o.a.d.e.physical.impl.BaseRootExec - Batch dump completed.
2022-01-30 20:26:35,654 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested RUNNING --> FAILED
2022-01-30 20:26:35,655 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.apache.drill.common.AutoCloseables - User Error Occurred: Memory was leaked
by query. Memory leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
(Memory was leaked by query. Memory leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
)
org.apache.drill.common.exceptions.UserException: DATA_READ ERROR: Memory was
leaked by query. Memory leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
[Error Id: a1a654bd-c653-4ce9-ab11-8c84556568e0 ]
at
org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:657)
at
org.apache.drill.common.AutoCloseables.closeWithUserException(AutoCloseables.java:78)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.close(ExternalSortBatch.java:516)
at
org.apache.drill.common.DeferredException.suppressingClose(DeferredException.java:159)
at
org.apache.drill.exec.physical.impl.BaseRootExec.close(BaseRootExec.java:169)
at
org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.close(ScreenCreator.java:124)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.closeOutResources(FragmentExecutor.java:407)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:239)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:359)
at
org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Memory was leaked by query. Memory
leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
at
org.apache.drill.exec.memory.BaseAllocator.close(BaseAllocator.java:520)
at
org.apache.drill.exec.ops.BaseOperatorContext.close(BaseOperatorContext.java:159)
at
org.apache.drill.exec.ops.OperatorContextImpl.close(OperatorContextImpl.java:77)
at org.apache.drill.common.AutoCloseables.close(AutoCloseables.java:91)
at
org.apache.drill.common.AutoCloseables.closeWithUserException(AutoCloseables.java:76)
... 11 common frames omitted
2022-01-30 20:26:35,655 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested FAILED --> FAILED
2022-01-30 20:26:35,656 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested FAILED --> FAILED
2022-01-30 20:26:35,656 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested FAILED --> FAILED
2022-01-30 20:26:35,656 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] INFO
o.a.d.e.w.fragment.FragmentExecutor - 1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0:
State change requested FAILED --> FINISHED
2022-01-30 20:26:35,656 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] ERROR
o.a.d.e.w.fragment.FragmentExecutor - SYSTEM ERROR:
UnsupportedOperationException: Map, Array, Union or repeated scalar type should
not be used in group by, order by or in a comparison operator. Drill does not
support compare between MAP:REQUIRED and MAP:REQUIRED.
Fragment: 0:0
Please, refer to logs for more information.
[Error Id: 4e6590f7-7cf6-466a-a3fe-1a8bf294a0f9 on localhost:31010]
org.apache.drill.common.exceptions.UserException: SYSTEM ERROR:
UnsupportedOperationException: Map, Array, Union or repeated scalar type should
not be used in group by, order by or in a comparison operator. Drill does not
support compare between MAP:REQUIRED and MAP:REQUIRED.
Fragment: 0:0
Please, refer to logs for more information.
[Error Id: 4e6590f7-7cf6-466a-a3fe-1a8bf294a0f9 on localhost:31010]
at
org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:657)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.sendFinalState(FragmentExecutor.java:392)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:244)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:359)
at
org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsupportedOperationException: Map, Array, Union or
repeated scalar type should not be used in group by, order by or in a
comparison operator. Drill does not support compare between MAP:REQUIRED and
MAP:REQUIRED.
at
org.apache.drill.exec.expr.fn.FunctionGenerationHelper.getOrderingComparator(FunctionGenerationHelper.java:65)
at
org.apache.drill.exec.physical.impl.xsort.BaseSortWrapper.generateComparisons(BaseSortWrapper.java:74)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.newSorter(SorterWrapper.java:85)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.getSorter(SorterWrapper.java:72)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.sortBatch(SorterWrapper.java:54)
at
org.apache.drill.exec.physical.impl.xsort.BufferedBatches.add(BufferedBatches.java:104)
at
org.apache.drill.exec.physical.impl.xsort.SortImpl.addBatch(SortImpl.java:309)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.loadBatch(ExternalSortBatch.java:455)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.load(ExternalSortBatch.java:400)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.innerNext(ExternalSortBatch.java:355)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.RecordIterator.nextBatch(RecordIterator.java:102)
at
org.apache.drill.exec.record.RecordIterator.next(RecordIterator.java:191)
at
org.apache.drill.exec.record.RecordIterator.prepare(RecordIterator.java:175)
at
org.apache.drill.exec.physical.impl.join.JoinStatus.prepare(JoinStatus.java:86)
at
org.apache.drill.exec.physical.impl.join.MergeJoinBatch.innerNext(MergeJoinBatch.java:184)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.loadBatch(ExternalSortBatch.java:441)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.load(ExternalSortBatch.java:400)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.innerNext(ExternalSortBatch.java:355)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.physical.impl.aggregate.StreamingAggBatch.innerNext(StreamingAggBatch.java:214)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:103)
at
org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.innerNext(ScreenCreator.java:81)
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:93)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.lambda$run$0(FragmentExecutor.java:321)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1762)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:310)
... 4 common frames omitted
Suppressed: org.apache.drill.exec.ops.QueryCancelledException: null
at
org.apache.drill.exec.work.fragment.FragmentExecutor$ExecutorStateImpl.checkContinue(FragmentExecutor.java:533)
at
org.apache.drill.exec.record.AbstractRecordBatch.checkContinue(AbstractRecordBatch.java:256)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:110)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.RecordIterator.clearInflightBatches(RecordIterator.java:359)
at
org.apache.drill.exec.record.RecordIterator.close(RecordIterator.java:365)
at
org.apache.drill.exec.physical.impl.join.MergeJoinBatch.close(MergeJoinBatch.java:300)
at
org.apache.drill.common.DeferredException.suppressingClose(DeferredException.java:159)
at
org.apache.drill.exec.physical.impl.BaseRootExec.close(BaseRootExec.java:169)
at
org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.close(ScreenCreator.java:124)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.closeOutResources(FragmentExecutor.java:407)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:239)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:359)
... 4 common frames omitted
Suppressed: org.apache.drill.common.exceptions.UserException:
DATA_READ ERROR: Memory was leaked by query. Memory leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
[Error Id: a1a654bd-c653-4ce9-ab11-8c84556568e0 ]
at
org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:657)
at
org.apache.drill.common.AutoCloseables.closeWithUserException(AutoCloseables.java:78)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.close(ExternalSortBatch.java:516)
... 10 common frames omitted
Caused by: java.lang.IllegalStateException: Memory was leaked
by query. Memory leaked: (1945600)
Allocator(op:0:0:10:ExternalSort) 20000000/1945600/1945600/1301505241
(res/actual/peak/limit)
at
org.apache.drill.exec.memory.BaseAllocator.close(BaseAllocator.java:520)
at
org.apache.drill.exec.ops.BaseOperatorContext.close(BaseOperatorContext.java:159)
at
org.apache.drill.exec.ops.OperatorContextImpl.close(OperatorContextImpl.java:77)
at
org.apache.drill.common.AutoCloseables.close(AutoCloseables.java:91)
at
org.apache.drill.common.AutoCloseables.closeWithUserException(AutoCloseables.java:76)
... 11 common frames omitted
Suppressed: java.lang.IllegalStateException: Memory was leaked by
query. Memory leaked: (2658304)
Allocator(op:0:0:6:MergeJoinPOP) 1000000/2658304/67231744/10000000000
(res/actual/peak/limit)
at
org.apache.drill.exec.memory.BaseAllocator.close(BaseAllocator.java:520)
at
org.apache.drill.exec.ops.BaseOperatorContext.close(BaseOperatorContext.java:159)
at
org.apache.drill.exec.ops.OperatorContextImpl.close(OperatorContextImpl.java:77)
at
org.apache.drill.exec.ops.FragmentContextImpl.suppressingClose(FragmentContextImpl.java:581)
at
org.apache.drill.exec.ops.FragmentContextImpl.close(FragmentContextImpl.java:571)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.closeOutResources(FragmentExecutor.java:414)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:239)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:359)
... 4 common frames omitted
Suppressed: java.lang.IllegalStateException: Memory was leaked by
query. Memory leaked: (22658304)
Allocator(frag:0:0) 70000000/22658304/145353728/103904515723
(res/actual/peak/limit)
at
org.apache.drill.exec.memory.BaseAllocator.close(BaseAllocator.java:520)
at
org.apache.drill.exec.ops.FragmentContextImpl.suppressingClose(FragmentContextImpl.java:581)
at
org.apache.drill.exec.ops.FragmentContextImpl.close(FragmentContextImpl.java:574)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.closeOutResources(FragmentExecutor.java:414)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:239)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:359)
... 4 common frames omitted
2022-01-30 20:26:35,662 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] WARN
o.a.d.exec.rpc.control.WorkEventBus - Fragment
1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:0:0 manager is not found in the work bus.
2022-01-30 20:26:35,663 [qtp1638679238-203] ERROR
o.a.d.e.server.rest.QueryResources - Query from Web UI Failed: {}
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
UnsupportedOperationException: Map, Array, Union or repeated scalar type should
not be used in group by, order by or in a comparison operator. Drill does not
support compare between MAP:REQUIRED and MAP:REQUIRED.
Fragment: 0:0
Please, refer to logs for more information.
[Error Id: 4e6590f7-7cf6-466a-a3fe-1a8bf294a0f9 on localhost:31010]
at
org.apache.drill.exec.server.rest.RestQueryRunner.submitQuery(RestQueryRunner.java:99)
at
org.apache.drill.exec.server.rest.RestQueryRunner.run(RestQueryRunner.java:54)
at
org.apache.drill.exec.server.rest.QueryResources.submitQuery(QueryResources.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
at
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:475)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:397)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
at
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:255)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
at
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
at
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:234)
at
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
at
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
at
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
at
org.apache.drill.exec.server.rest.header.ResponseHeadersSettingFilter.doFilter(ResponseHeadersSettingFilter.java:71)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
at
org.apache.drill.exec.server.rest.CsrfTokenValidateFilter.doFilter(CsrfTokenValidateFilter.java:55)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
at
org.apache.drill.exec.server.rest.CsrfTokenInjectFilter.doFilter(CsrfTokenInjectFilter.java:54)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)
at
org.apache.drill.exec.server.rest.auth.DrillHttpSecurityHandlerProvider.handle(DrillHttpSecurityHandlerProvider.java:163)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsupportedOperationException: Map, Array, Union or
repeated scalar type should not be used in group by, order by or in a
comparison operator. Drill does not support compare between MAP:REQUIRED and
MAP:REQUIRED.
at
org.apache.drill.exec.expr.fn.FunctionGenerationHelper.getOrderingComparator(FunctionGenerationHelper.java:65)
at
org.apache.drill.exec.physical.impl.xsort.BaseSortWrapper.generateComparisons(BaseSortWrapper.java:74)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.newSorter(SorterWrapper.java:85)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.getSorter(SorterWrapper.java:72)
at
org.apache.drill.exec.physical.impl.xsort.SorterWrapper.sortBatch(SorterWrapper.java:54)
at
org.apache.drill.exec.physical.impl.xsort.BufferedBatches.add(BufferedBatches.java:104)
at
org.apache.drill.exec.physical.impl.xsort.SortImpl.addBatch(SortImpl.java:309)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.loadBatch(ExternalSortBatch.java:455)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.load(ExternalSortBatch.java:400)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.innerNext(ExternalSortBatch.java:355)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.RecordIterator.nextBatch(RecordIterator.java:102)
at
org.apache.drill.exec.record.RecordIterator.next(RecordIterator.java:191)
at
org.apache.drill.exec.record.RecordIterator.prepare(RecordIterator.java:175)
at
org.apache.drill.exec.physical.impl.join.JoinStatus.prepare(JoinStatus.java:86)
at
org.apache.drill.exec.physical.impl.join.MergeJoinBatch.innerNext(MergeJoinBatch.java:184)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.loadBatch(ExternalSortBatch.java:441)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.load(ExternalSortBatch.java:400)
at
org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.innerNext(ExternalSortBatch.java:355)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.physical.impl.aggregate.StreamingAggBatch.innerNext(StreamingAggBatch.java:214)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:111)
at
org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:59)
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:85)
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:170)
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:103)
at
org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.innerNext(ScreenCreator.java:81)
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:93)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.lambda$run$0(FragmentExecutor.java:321)
at .......(:0)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1762)
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:310)
at
org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38)
at .......(:0)
2022-01-30 20:26:35,675 [1e08c8bb-e6b9-bbb9-831c-9f7d64bb04d9:frag:0:0] WARN
o.a.d.e.w.f.QueryStateProcessor - Dropping request to move to COMPLETED state
as query is already at FAILED state (which is terminal).