[ 
https://issues.apache.org/jira/browse/DRILL-6718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16596528#comment-16596528
 ] 

Dechang Gu commented on DRILL-6718:
-----------------------------------

[~weijie] Here is a query that was failed, complete profile is also uploaded 
(TPCH_03_1_id_247b6925-b3f6-381f-12d2-7971abf317b7.jsonQuery):
{code}
select l.l_orderkey, sum(l.l_extendedprice * (1 - l.l_discount)) as revenue, 
o.o_orderdate, o.o_shippriority  from customer c, orders o, lineitem l  where 
c.c_mktsegment = 'HOUSEHOLD' and c.c_custkey = o.o_custkey and l.l_orderkey = 
o.o_orderkey and o.o_orderdate < date '1995-03-25' and l.l_shipdate > date 
'1995-03-25'  group by l.l_orderkey, o.o_orderdate, o.o_shippriority order by 
revenue desc, o.o_orderdate limit 10 {code}
and plan
{code}
00-00    Screen : rowType = RecordType(ANY l_orderkey, ANY revenue, ANY 
o_orderdate, ANY o_shippriority): rowcount = 10.0, cumulative cost = 
{4.2669698625999994E9 rows, 3.744022097539064E10 cpu, 0.0 io, 
7.926132591820801E12 network, 1.19202670752E10 memory}, id = 18236
00-01      Project(l_orderkey=[$0], revenue=[$1], o_orderdate=[$2], 
o_shippriority=[$3]) : rowType = RecordType(ANY l_orderkey, ANY revenue, ANY 
o_orderdate, ANY o_shippriority): rowcount = 10.0, cumulative cost = 
{4.2669698615999994E9 rows, 3.744022097439064E10 cpu, 0.0 io, 
7.926132591820801E12 network, 1.19202670752E10 memory}, id = 18235
00-02        SelectionVectorRemover : rowType = RecordType(ANY l_orderkey, ANY 
revenue, ANY o_orderdate, ANY o_shippriority): rowcount = 10.0, cumulative cost 
= {4.2669698515999994E9 rows, 3.744022093439064E10 cpu, 0.0 io, 
7.926132591820801E12 network, 1.19202670752E10 memory}, id = 18234
00-03          Limit(fetch=[10]) : rowType = RecordType(ANY l_orderkey, ANY 
revenue, ANY o_orderdate, ANY o_shippriority): rowcount = 10.0, cumulative cost 
= {4.2669698415999994E9 rows, 3.744022092439064E10 cpu, 0.0 io, 
7.926132591820801E12 network, 1.19202670752E10 memory}, id = 18233
00-04            SingleMergeExchange(sort0=[1 DESC], sort1=[2]) : rowType = 
RecordType(ANY l_orderkey, ANY revenue, ANY o_orderdate, ANY o_shippriority): 
rowcount = 3.00018951E7, cumulative cost = {4.2669698315999994E9 rows, 
3.744022088439064E10 cpu, 0.0 io, 7.926132591820801E12 network, 
1.19202670752E10 memory}, id = 18232
01-01              OrderedMuxExchange(sort0=[1 DESC], sort1=[2]) : rowType = 
RecordType(ANY l_orderkey, ANY revenue, ANY o_orderdate, ANY o_shippriority): 
rowcount = 3.00018951E7, cumulative cost = {4.2369679364999995E9 rows, 
3.680154917066042E10 cpu, 0.0 io, 7.4345815425024E12 network, 1.19202670752E10 
memory}, id = 18231
02-01                SelectionVectorRemover : rowType = RecordType(ANY 
l_orderkey, ANY revenue, ANY o_orderdate, ANY o_shippriority): rowcount = 
3.00018951E7, cumulative cost = {4.2069660413999996E9 rows, 
3.6771547275560425E10 cpu, 0.0 io, 7.4345815425024E12 network, 1.19202670752E10 
memory}, id = 18230
02-02                  TopN(limit=[10]) : rowType = RecordType(ANY l_orderkey, 
ANY revenue, ANY o_orderdate, ANY o_shippriority): rowcount = 3.00018951E7, 
cumulative cost = {4.1769641462999997E9 rows, 3.674154538046043E10 cpu, 0.0 io, 
7.4345815425024E12 network, 1.19202670752E10 memory}, id = 18229
02-03                    HashToRandomExchange(dist0=[[$1]], dist1=[[$2]]) : 
rowType = RecordType(ANY l_orderkey, ANY revenue, ANY o_orderdate, ANY 
o_shippriority): rowcount = 3.00018951E7, cumulative cost = {4.1469622512E9 
rows, 3.59442322746E10 cpu, 0.0 io, 7.4345815425024E12 network, 
1.19202670752E10 memory}, id = 18228
03-01                      Project(l_orderkey=[$0], revenue=[$3], 
o_orderdate=[$1], o_shippriority=[$2]) : rowType = RecordType(ANY l_orderkey, 
ANY revenue, ANY o_orderdate, ANY o_shippriority): rowcount = 3.00018951E7, 
cumulative cost = {4.1169603561E9 rows, 3.55842095334E10 cpu, 0.0 io, 
6.943030493184E12 network, 1.19202670752E10 memory}, id = 18227
03-02                        HashAgg(group=[{0, 1, 2}], revenue=[SUM($3)]) : 
rowType = RecordType(ANY l_orderkey, ANY o_orderdate, ANY o_shippriority, ANY 
revenue): rowcount = 3.00018951E7, cumulative cost = {4.086958461E9 rows, 
3.5464201953E10 cpu, 0.0 io, 6.943030493184E12 network, 1.19202670752E10 
memory}, id = 18226
03-03                          Project(l_orderkey=[$6], o_orderdate=[$4], 
o_shippriority=[$5], $f3=[*($8, -(1, $9))]) : rowType = RecordType(ANY 
l_orderkey, ANY o_orderdate, ANY o_shippriority, ANY $f3): rowcount = 
3.00018951E8, cumulative cost = {3.78693951E9 rows, 2.4663519717E10 cpu, 0.0 
io, 6.943030493184E12 network, 1.3596E9 memory}, id = 18225
03-04                            Project(c_mktsegment=[$8], c_custkey=[$9], 
o_custkey=[$4], o_orderkey=[$5], o_orderdate=[$6], o_shippriority=[$7], 
l_orderkey=[$0], l_shipdate=[$1], l_extendedprice=[$2], l_discount=[$3]) : 
rowType = RecordType(ANY c_mktsegment, ANY c_custkey, ANY o_custkey, ANY 
o_orderkey, ANY o_orderdate, ANY o_shippriority, ANY l_orderkey, ANY 
l_shipdate, ANY l_extendedprice, ANY l_discount): rowcount = 3.00018951E8, 
cumulative cost = {3.486920559E9 rows, 2.256338706E10 cpu, 0.0 io, 
6.943030493184E12 network, 1.3596E9 memory}, id = 18224
03-05                              HashJoin(condition=[=($5, $0)], 
joinType=[inner]) : rowType = RecordType(ANY l_orderkey, ANY l_shipdate, ANY 
l_extendedprice, ANY l_discount, ANY o_custkey, ANY o_orderkey, ANY 
o_orderdate, ANY o_shippriority, ANY c_mktsegment, ANY c_custkey): rowcount = 
3.00018951E8, cumulative cost = {3.186901608E9 rows, 1.956319755E10 cpu, 0.0 
io, 6.943030493184E12 network, 1.3596E9 memory}, id = 18223
03-07                                HashToRandomExchange(dist0=[[$0]]) : 
rowType = RecordType(ANY l_orderkey, ANY l_shipdate, ANY l_extendedprice, ANY 
l_discount): rowcount = 3.00018951E8, cumulative cost = {2.100132657E9 rows, 
1.1400720138E10 cpu, 0.0 io, 4.915510493184E12 network, 0.0 memory}, id = 18212
04-01                                  Filter(condition=[>($1, 1995-03-25)]) : 
rowType = RecordType(ANY l_orderkey, ANY l_shipdate, ANY l_extendedprice, ANY 
l_discount): rowcount = 3.00018951E8, cumulative cost = {1.800113706E9 rows, 
6.600416922E9 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 18211
04-02                                    RuntimeFilter : rowType = 
RecordType(ANY l_orderkey, ANY l_shipdate, ANY l_extendedprice, ANY 
l_discount): rowcount = 6.00037902E8, cumulative cost = {1.200075804E9 rows, 
3.00018951E9 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 18210
04-03                                      Scan(groupscan=[ParquetGroupScan 
[entries=[ReadEntryWithPath 
[path=maprfs:///drill/testdata/tpch/sf100/parquet/lineitem]], 
selectionRoot=maprfs:/drill/testdata/tpch/sf100/parquet/lineitem, numFiles=1, 
numRowGroups=300, usedMetadataFile=false, columns=[`l_orderkey`, `l_shipdate`, 
`l_extendedprice`, `l_discount`]]]) : rowType = RecordType(ANY l_orderkey, ANY 
l_shipdate, ANY l_extendedprice, ANY l_discount): rowcount = 6.00037902E8, 
cumulative cost = {6.00037902E8 rows, 2.400151608E9 cpu, 0.0 io, 0.0 network, 
0.0 memory}, id = 18209
03-06                                HashToRandomExchange(dist0=[[$1]]) : 
rowType = RecordType(ANY o_custkey, ANY o_orderkey, ANY o_orderdate, ANY 
o_shippriority, ANY c_mktsegment, ANY c_custkey): rowcount = 7.5E7, cumulative 
cost = {7.1175E8 rows, 3.96225E9 cpu, 0.0 io, 2.02752E12 network, 3.96E7 
memory}, id = 18222
05-01                                  HashJoin(condition=[=($5, $0)], 
joinType=[inner]) : rowType = RecordType(ANY o_custkey, ANY o_orderkey, ANY 
o_orderdate, ANY o_shippriority, ANY c_mktsegment, ANY c_custkey): rowcount = 
7.5E7, cumulative cost = {6.3675E8 rows, 2.76225E9 cpu, 0.0 io, 1.8432E11 
network, 3.96E7 memory}, id = 18221
05-03                                    SelectionVectorRemover : rowType = 
RecordType(ANY o_custkey, ANY o_orderkey, ANY o_orderdate, ANY o_shippriority): 
rowcount = 7.5E7, cumulative cost = {5.25E8 rows, 1.725E9 cpu, 0.0 io, 0.0 
network, 0.0 memory}, id = 18216
05-04                                      Filter(condition=[<($2, 
1995-03-25)]) : rowType = RecordType(ANY o_custkey, ANY o_orderkey, ANY 
o_orderdate, ANY o_shippriority): rowcount = 7.5E7, cumulative cost = {4.5E8 
rows, 1.65E9 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 18215
05-05                                        RuntimeFilter : rowType = 
RecordType(ANY o_custkey, ANY o_orderkey, ANY o_orderdate, ANY o_shippriority): 
rowcount = 1.5E8, cumulative cost = {3.0E8 rows, 7.5E8 cpu, 0.0 io, 0.0 
network, 0.0 memory}, id = 18214
05-06                                          Scan(groupscan=[ParquetGroupScan 
[entries=[ReadEntryWithPath 
[path=maprfs:///drill/testdata/tpch/sf100/parquet/orders]], 
selectionRoot=maprfs:/drill/testdata/tpch/sf100/parquet/orders, numFiles=1, 
numRowGroups=70, usedMetadataFile=false, columns=[`o_custkey`, `o_orderkey`, 
`o_orderdate`, `o_shippriority`]]]) : rowType = RecordType(ANY o_custkey, ANY 
o_orderkey, ANY o_orderdate, ANY o_shippriority): rowcount = 1.5E8, cumulative 
cost = {1.5E8 rows, 6.0E8 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 18213
05-02                                    BroadcastExchange : rowType = 
RecordType(ANY c_mktsegment, ANY c_custkey): rowcount = 2250000.0, cumulative 
cost = {3.45E7 rows, 1.1925E8 cpu, 0.0 io, 1.8432E11 network, 0.0 memory}, id = 
18220
06-01                                      SelectionVectorRemover : rowType = 
RecordType(ANY c_mktsegment, ANY c_custkey): rowcount = 2250000.0, cumulative 
cost = {3.225E7 rows, 1.0125E8 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 18219
06-02                                        Filter(condition=[=($0, 
'HOUSEHOLD')]) : rowType = RecordType(ANY c_mktsegment, ANY c_custkey): 
rowcount = 2250000.0, cumulative cost = {3.0E7 rows, 9.9E7 cpu, 0.0 io, 0.0 
network, 0.0 memory}, id = 18218
06-03                                          Scan(groupscan=[ParquetGroupScan 
[entries=[ReadEntryWithPath 
[path=maprfs:///drill/testdata/tpch/sf100/parquet/customer]], 
selectionRoot=maprfs:/drill/testdata/tpch/sf100/parquet/customer, numFiles=1, 
numRowGroups=10, usedMetadataFile=false, columns=[`c_mktsegment`, 
`c_custkey`]]]) : rowType = RecordType(ANY c_mktsegment, ANY c_custkey): 
rowcount = 1.5E7, cumulative cost = {1.5E7 rows, 3.0E7 cpu, 0.0 io, 0.0 
network, 0.0 memory}, id = 18217
{code}

> TPCH Queries hit IOB when running with the JPPD feature
> -------------------------------------------------------
>
>                 Key: DRILL-6718
>                 URL: https://issues.apache.org/jira/browse/DRILL-6718
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Functions - Drill
>    Affects Versions: 1.15.0
>         Environment: RHEL 7
>            Reporter: Dechang Gu
>            Assignee: weijie.tong
>            Priority: Major
>         Attachments: TPCH_03_1_id_247b6925-b3f6-381f-12d2-7971abf317b7.json
>
>
> Running TPCH SF100 queries on drill master commit 
>  b895b28182a981e5948ffa292da827cb8b2e571e (DRILL-6385: Support JPPD feature). 
> 9 queries hit IOB error, the stacks are similar, as follows
> {code}
> 2018-08-27 17:27:14,916 [247b6925-b3f6-381f-12d2-7971abf317b7:frag:5:35] 
> ERROR o.a.d.e.w.fragment.FragmentExecutor - SYSTEM ERROR: 
> IndexOutOfBoundsException: DrillBuf[1], udle: [1 0..0], index: 0, length: 1 
> (expected: range(0, 0))
> Fragment 5:35
> [Error Id: a3de08b2-6453-4354-8d58-8a79d4c62469 on perf109-68.qa.lab:31010]
> org.apache.drill.common.exceptions.UserException: SYSTEM ERROR: 
> IndexOutOfBoundsException: DrillBuf[1], udle: [1 0..0], index: 0, length: 1 
> (expected: range(0, 0))
> Fragment 5:35
> [Error Id: a3de08b2-6453-4354-8d58-8a79d4c62469 on perf109-68.qa.lab:31010]
>         at 
> org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:633)
>  ~[drill-common-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.sendFinalState(FragmentExecutor.java:360)
>  [drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup(FragmentExecutor.java:215)
>  [drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:326)
>  [drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.common.SelfCleaningRunnable.run(SelfCleaningRunnable.java:38)
>  [drill-common-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  [na:1.8.0_171]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  [na:1.8.0_171]
>         at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]
> Caused by: java.lang.IndexOutOfBoundsException: DrillBuf[1], udle: [1 0..0], 
> index: 0, length: 1 (expected: range(0, 0))
>         at 
> org.apache.drill.exec.memory.BoundsChecking.checkIndex(BoundsChecking.java:80)
>  ~[drill-memory-base-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.memory.BoundsChecking.lengthCheck(BoundsChecking.java:86)
>  ~[drill-memory-base-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at io.netty.buffer.DrillBuf.chk(DrillBuf.java:119) 
> ~[drill-memory-base-1.15.0-SNAPSHOT.jar:4.0.48.Final]
>         at io.netty.buffer.DrillBuf.getByte(DrillBuf.java:757) 
> ~[drill-memory-base-1.15.0-SNAPSHOT.jar:4.0.48.Final]
>         at 
> org.apache.drill.exec.vector.UInt1Vector$Accessor.get(UInt1Vector.java:424) 
> ~[vector-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.vector.NullableBigIntVector$Accessor.isSet(NullableBigIntVector.java:446)
>  ~[vector-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.test.generated.Hash64Gen2282971.hash64Code(Hash64Gen2282971.java:62)
>  ~[na:na]
>         at 
> org.apache.drill.exec.physical.impl.filter.RuntimeFilterRecordBatch.computeBitSet(RuntimeFilterRecordBatch.java:241)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.filter.RuntimeFilterRecordBatch.applyRuntimeFilter(RuntimeFilterRecordBatch.java:219)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.filter.RuntimeFilterRecordBatch.doWork(RuntimeFilterRecordBatch.java:92)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:117)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:172)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:109)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:63)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:172)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:109)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractUnaryRecordBatch.innerNext(AbstractUnaryRecordBatch.java:63)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:172)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:119)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.test.generated.HashJoinProbeGen522.executeProbePhase(HashJoinProbeTemplate.java:242)
>  ~[na:na]
>         at 
> org.apache.drill.exec.test.generated.HashJoinProbeGen522.probeAndProject(HashJoinProbeTemplate.java:393)
>  ~[na:na]
>         at 
> org.apache.drill.exec.physical.impl.join.HashJoinBatch.innerNext(HashJoinBatch.java:478)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:172)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:103) 
> ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.partitionsender.PartitionSenderRootExec.innerNext(PartitionSenderRootExec.java:152)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:93) 
> ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:293)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run(FragmentExecutor.java:280)
>  ~[drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         at java.security.AccessController.doPrivileged(Native Method) 
> ~[na:1.8.0_171]
>         at javax.security.auth.Subject.doAs(Subject.java:422) ~[na:1.8.0_171]
>         at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1595)
>  ~[hadoop-common-2.7.0-mapr-1707.jar:na]
>         at 
> org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:280)
>  [drill-java-exec-1.15.0-SNAPSHOT.jar:1.15.0-SNAPSHOT]
>         ... 4 common frames omitted
> 2018-08-27 17:27:14,917 [247b6925-b3f6-381f-12d2-7971abf317b7:frag:5:15] 
> ERROR o.a.d.e.w.fragment.FragmentExecutor - SYSTEM ERROR: 
> IndexOutOfBoundsException: DrillBuf[1], udle: [1 0..0], index: 0, length: 1 
> (expected: range(0, 0))
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to