James E. King, III created THRIFT-3191:
------------------------------------------
Summary: Perl compiler does not add support for Thrift::TException
handling
Key: THRIFT-3191
URL: https://issues.apache.org/jira/browse/THRIFT-3191
Project: Thrift
Issue Type: Bug
Components: Perl - Compiler
Affects Versions: 0.9.2
Reporter: James E. King, III
Assignee: James E. King, III
Priority: Critical
While adding "make cross" test server support for some other refactoring I
found that the generated code to handle testException exception responses does
not work properly. The test says that the code can die with the specified
exceptions, but it can also die with Thrift::TException.
The generated code that fails in ThriftTest.pm:
{noformat}
sub process_testException {
my ($self, $seqid, $input, $output) = @_;
my $args = new ThriftTest::ThriftTest_testException_args();
$args->read($input);
$input->readMessageEnd();
my $result = new ThriftTest::ThriftTest_testException_result();
eval {
$self->{handler}->testException($args->arg);
}; if( UNIVERSAL::isa($@,'ThriftTest::Xception') ){
$result->{err1} = $@;
};
$output->writeMessageBegin('testException', TMessageType::REPLY, $seqid);
$result->write($output);
$output->writeMessageEnd();
$output->getTransport()->flush();
}
{noformat}
Code that allows the test to pass adds support for capturing TException:
{noformat}
sub process_testException {
my ($self, $seqid, $input, $output) = @_;
my $args = new ThriftTest::ThriftTest_testException_args();
$args->read($input);
$input->readMessageEnd();
my $result = new ThriftTest::ThriftTest_testException_result();
eval {
$self->{handler}->testException($args->arg);
}; if( UNIVERSAL::isa($@,'ThriftTest::Xception') ){
$result->{err1} = $@;
}; if( UNIVERSAL::isa($@,'Thrift::TException') ){
$result->{err1} = $@;
}
$output->writeMessageBegin('testException', TMessageType::REPLY, $seqid);
$result->write($output);
$output->writeMessageEnd();
$output->getTransport()->flush();
}
{noformat}
Adding this to the compiler output is reasonable, however what the generated
code is doing when an exception of another type is thrown seems quite wrong.
It simply ignores the exception and returns an empty reply.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)