[ https://issues.apache.org/jira/browse/DRILL-3944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14961294#comment-14961294 ]
Jason Altekruse commented on DRILL-3944: ---------------------------------------- The maxdir function is not designed to be used in the select list. Without a filter on the directory name Drill will read all of the data in all sub directories and evaluate a function for each row it finds (maxdir is a heavyweight function that asks the filesystem to enumerate all of the files, which means even if this did run it would take a really long time). Maxdir is provided as a way to run a simple 'query' against the directory structure to limit how much is read. Try to use this query instead: select dir0 from vspace.wspace.`freemat2` where dir0 = maxdir('vspace.wspace', 'freemat2'); If you just want to query the directory structure this might not be exactly what you want, because you will get a resulting row for each row found in the combination of all files found in the max dir. Queries like this would be better suited for the file structure exposed as a table itself, with one row for each directory down the tree. Drill does not currently provide this, but we could open a new JIRA to discuss a possible design. I will try to take a look at this to fix the bad error message soon, so you can keep the JIRA open even if this allows the query to run and fit your needs. > Drill MAXDIR Unknown variable or type "FILE_SEPARATOR" > ------------------------------------------------------ > > Key: DRILL-3944 > URL: https://issues.apache.org/jira/browse/DRILL-3944 > Project: Apache Drill > Issue Type: Bug > Affects Versions: 1.2.0 > Environment: 1.2.0 > Reporter: Jitendra > > We are facing issue with MAXDIR function, below is the query we are using to > reproduce this issue. > 0: jdbc:drill:drillbit=localhost> select maxdir('vspace.wspace', 'freemat2') > from vspace.wspace.`freemat2`; > Error: SYSTEM ERROR: CompileException: Line 75, Column 70: Unknown variable > or type "FILE_SEPARATOR" > Fragment 0:0 > [Error Id: d17c6e48-554d-4934-bc4d-783ca3dc6f51 on 10.10.99.71:31010] > (state=,code=0); > Below are the drillbit logs. > 2015-10-09 21:26:21,972 [29e7cf02-02bf-b007-72f2-52c67c80ea1c:frag:0:0] INFO > o.a.d.e.w.fragment.FragmentExecutor - > 29e7cf02-02bf-b007-72f2-52c67c80ea1c:0:0: State change requested > AWAITING_ALLOCATION --> RUNNING > 2015-10-09 21:26:21,972 [29e7cf02-02bf-b007-72f2-52c67c80ea1c:frag:0:0] INFO > o.a.d.e.w.f.FragmentStatusReporter - > 29e7cf02-02bf-b007-72f2-52c67c80ea1c:0:0: State to report: RUNNING > 2015-10-09 21:26:22,038 [29e7cf02-02bf-b007-72f2-52c67c80ea1c:frag:0:0] INFO > o.a.d.e.w.fragment.FragmentExecutor - > 29e7cf02-02bf-b007-72f2-52c67c80ea1c:0:0: State change requested RUNNING --> > FINISHED > 2015-10-09 21:26:22,039 [29e7cf02-02bf-b007-72f2-52c67c80ea1c:frag:0:0] INFO > o.a.d.e.w.f.FragmentStatusReporter - > 29e7cf02-02bf-b007-72f2-52c67c80ea1c:0:0: State to report: FINISHED > 2015-10-09 21:29:59,281 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:foreman] INFO > o.a.d.e.store.mock.MockStorageEngine - Failure while attempting to check for > Parquet metadata file. > java.io.IOException: Open failed for file: /vspace/wspace/freemat2/20151005, > error: Invalid argument (22) > at com.mapr.fs.MapRClientImpl.open(MapRClientImpl.java:212) > ~[maprfs-4.1.0-mapr.jar:4.1.0-mapr] > at com.mapr.fs.MapRFileSystem.open(MapRFileSystem.java:862) > ~[maprfs-4.1.0-mapr.jar:4.1.0-mapr] > at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:800) > ~[hadoop-common-2.5.1-mapr-1503.jar:na] > at > org.apache.drill.exec.store.dfs.DrillFileSystem.open(DrillFileSystem.java:132) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.dfs.BasicFormatMatcher$MagicStringMatcher.matches(BasicFormatMatcher.java:142) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.dfs.BasicFormatMatcher.isFileReadable(BasicFormatMatcher.java:112) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.parquet.ParquetFormatPlugin$ParquetFormatMatcher.isDirReadable(ParquetFormatPlugin.java:256) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.parquet.ParquetFormatPlugin$ParquetFormatMatcher.isReadable(ParquetFormatPlugin.java:210) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory$WorkspaceSchema.create(WorkspaceSchemaFactory.java:326) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory$WorkspaceSchema.create(WorkspaceSchemaFactory.java:153) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.planner.sql.ExpandingConcurrentMap.getNewEntry(ExpandingConcurrentMap.java:96) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.planner.sql.ExpandingConcurrentMap.get(ExpandingConcurrentMap.java:90) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory$WorkspaceSchema.getTable(WorkspaceSchemaFactory.java:276) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.calcite.jdbc.SimpleCalciteSchema.getTable(SimpleCalciteSchema.java:83) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.prepare.CalciteCatalogReader.getTableFrom(CalciteCatalogReader.java:116) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.prepare.CalciteCatalogReader.getTable(CalciteCatalogReader.java:99) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.prepare.CalciteCatalogReader.getTable(CalciteCatalogReader.java:70) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.EmptyScope.getTableNamespace(EmptyScope.java:75) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.DelegatingScope.getTableNamespace(DelegatingScope.java:124) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:104) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:86) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:877) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:863) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:2777) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:2762) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:2985) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:86) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:877) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:863) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:210) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:837) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:551) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:177) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.calcite.prepare.PlannerImpl.validateAndGetType(PlannerImpl.java:188) > [calcite-core-1.4.0-drill-r5.jar:1.4.0-drill-r5] > at > org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.validateNode(DefaultSqlHandler.java:447) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.validateAndConvert(DefaultSqlHandler.java:190) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:159) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:178) > [drill-java-exec-1.2.0.jar:1.2.0] > at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:905) > [drill-java-exec-1.2.0.jar:1.2.0] > at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:244) > [drill-java-exec-1.2.0.jar:1.2.0] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > [na:1.7.0_85] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > [na:1.7.0_85] > at java.lang.Thread.run(Thread.java:745) [na:1.7.0_85] > 2015-10-09 21:29:59,429 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:foreman] INFO > o.a.d.e.s.schedule.BlockMapBuilder - Get block maps: Executed 271 out of 271 > using 16 threads. Time: 108ms total, 5.771793ms avg, 9ms max. > 2015-10-09 21:29:59,432 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:foreman] INFO > o.a.d.e.s.schedule.BlockMapBuilder - Get block maps: Executed 271 out of 271 > using 16 threads. Earliest start: 292.413000 ?s, Latest start: 103175.999000 > ?s, Average start: 48766.137229 ?s . > 2015-10-09 21:29:59,541 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:frag:0:0] INFO > o.a.d.e.w.fragment.FragmentExecutor - > 29e7ce27-9cad-9d8a-a482-39f54cc7deda:0:0: State change requested > AWAITING_ALLOCATION --> RUNNING > 2015-10-09 21:29:59,542 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:frag:0:0] INFO > o.a.d.e.w.f.FragmentStatusReporter - > 29e7ce27-9cad-9d8a-a482-39f54cc7deda:0:0: State to report: RUNNING > 2015-10-09 21:29:59,571 [29e7ce27-9cad-9d8a-a482-39f54cc7deda:frag:0:0] ERROR > o.a.d.e.r.AbstractSingleRecordBatch - Failure during query > org.apache.drill.exec.exception.SchemaChangeException: Failure while > attempting to load generated class > at > org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:445) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext(AbstractSingleRecordBatch.java:78) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:129) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:147) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:83) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.innerNext(ScreenCreator.java:80) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:73) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:258) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:252) > [drill-java-exec-1.2.0.jar:1.2.0] > at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_85] > at javax.security.auth.Subject.doAs(Subject.java:415) [na:1.7.0_85] > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1566) > [hadoop-common-2.5.1-mapr-1503.jar:na] > at > org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:252) > [drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38) > [drill-common-1.2.0.jar:1.2.0] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > [na:1.7.0_85] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > [na:1.7.0_85] > at java.lang.Thread.run(Thread.java:745) [na:1.7.0_85] > Caused by: org.apache.drill.exec.exception.ClassTransformationException: > java.util.concurrent.ExecutionException: > org.apache.drill.exec.exception.ClassTransformationException: Failure > generating transformation classes for value: > ..... > ...... > at > org.apache.drill.exec.compile.CodeCompiler.getImplementationClass(CodeCompiler.java:72) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.compile.CodeCompiler.getImplementationClass(CodeCompiler.java:58) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.ops.FragmentContext.getImplementationClass(FragmentContext.java:299) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:442) > [drill-java-exec-1.2.0.jar:1.2.0] > ... 16 common frames omitted > Caused by: java.util.concurrent.ExecutionException: > org.apache.drill.exec.exception.ClassTransformationException: Failure > generating transformation classes for value: > package org.apache.drill.exec.test.generated; > import io.netty.buffer.DrillBuf; > import org.apache.drill.exec.exception.SchemaChangeException; > import org.apache.drill.exec.expr.holders.VarCharHolder; > import org.apache.drill.exec.ops.FragmentContext; > import org.apache.drill.exec.record.RecordBatch; > import org.apache.drill.exec.store.PartitionExplorer; > import org.apache.drill.exec.vector.ValueHolderHelper; > import org.apache.drill.exec.vector.VarCharVector; > public class ProjectorGen7 { > DrillBuf work0; > PartitionExplorer work1; > VarCharHolder string2; > VarCharHolder string3; > VarCharHolder constant5; > VarCharVector vv6; > while (partitionIterator.hasNext()) { > curr = (String) partitionIterator.next(); > if (subPartitionStr.compareTo(curr) < 0) { subPartitionStr = curr; } > at > org.apache.drill.exec.compile.CodeCompiler.getImplementationClass(CodeCompiler.java:65) > ~[drill-java-exec-1.2.0.jar:1.2.0] > ... 19 common frames omitted > Caused by: org.apache.drill.exec.exception.ClassTransformationException: > Failure generating transformation classes for value: > package org.apache.drill.exec.test.generated; > ............... > .............. > at > org.apache.drill.exec.compile.ClassTransformer.getImplementationClass(ClassTransformer.java:304) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.compile.CodeCompiler$Loader.load(CodeCompiler.java:80) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > org.apache.drill.exec.compile.CodeCompiler$Loader.load(CodeCompiler.java:76) > ~[drill-java-exec-1.2.0.jar:1.2.0] > at > com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) > ~[guava-14.0.1.jar:na] > at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) > ~[guava-14.0.1.jar:na] > ... 25 common frames omitted > Caused by: org.codehaus.commons.compiler.CompileException: Line 75, Column > 70: Unknown variable or type "FILE_SEPARATOR" > at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:10056) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java:5377) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$12300(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler$16.visitPackage(UnitCompiler.java:5097) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.Java$Package.accept(Java.java:3168) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java:5141) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java:5372) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$15400(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.UnitCompiler$16.visitAmbiguousName(UnitCompiler.java:5131) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.Java$AmbiguousName.accept(Java.java:3139) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java:5141) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.UnitCompiler.findMostSpecificIInvocable(UnitCompiler.java:7440) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:7336) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:7239) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:3860) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$6900(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.UnitCompiler$10.visitMethodInvocation(UnitCompiler.java:3261) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.Java$MethodInvocation.accept(Java.java:3978) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:3288) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:4354) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1835) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$2000(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.UnitCompiler$4.visitLocalVariableDeclarationStatement(UnitCompiler.java:949) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.Java$LocalVariableDeclarationStatement.accept(Java.java:2512) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:962) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1004) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:989) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$1000(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler$4.visitBlock(UnitCompiler.java:939) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.Java$Block.accept(Java.java:2005) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:962) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1327) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.access$900(UnitCompiler.java:182) > ~[janino-2.7.4.jar:2.7.4] > at > org.codehaus.janino.UnitCompiler$4.visitLabeledStatement(UnitCompiler.java:938) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.Java$LabeledStatement.accept(Java.java:1966) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:962) > ~[janino-2.7.4.jar:2.7.4] > at org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1004) > ~[janino-2.7.4.jar:2.7.4] > ------------------------------------------------------------------------------------------------------------------------------------ -- This message was sent by Atlassian JIRA (v6.3.4#6332)