Hi Ceki, thanks for the
reply.
Yes, I upgraded to 0.9.24 while investigating this problem. I must have captured the stack before
that.
I wondered about a race condition too. To try mitigate that at SubethaSMTP start/shutdown, I added
Thread.sleep(10000) calls after start and before shutdown. There was no change; is 10 seconds long enough to wait
to see if a shutdown server is the problem?
Any suggestion for setting the timeout value via
Logback?
On Fri, 23 Jul 2010 17:22:27 +0200
Ceki Gülcü <ceki@qos.ch> wrote:
> The line
numbers in the stack trace you sent indicate an
>earlier version of logback, probably version 0.9.20 or
>0.9.21.
>
> In the past we also ran into problems while testing
>SMTPAppender with
SubethaSMTP. If my memory serves me
>correctly, it was due to a race condition. Maybe the
>server is
shutdown before SMTPAppender has a chance to
>receive the response of the server.
>
> On 23/07/2010
4:54 PM, Jeff Jensen wrote:
>> Using Logback 0.9.24 and SLF4J 1.6.1.
>>
>> I'm trying to
resolve a hang problem with the
>> ch.qos.logback.classic.net.SMTPAppender in an
>>integration test
and using
>> SubethaSMTP as the email server. We have many tests
>>working with
>>
SubethaSMTP that send emails, but not with Logback, so I
>>know it works
>> for the non-Logback
configuration. I've also seen
>>SMTPAppender work in
>> a different situation to the production
email server.
>> So I think I have
>> a config error somewhere with Logback setup to
>>SubethaSMTP, but not sure
>> what, or there is an issue in the LB & SS
interaction.
>>
>> This is the SMTPAppender config:
>>
>> <appender name="EMAIL"
>>class="ch.qos.logback.classic.net.SMTPAppender">
>> <layout class="ch.qos.logback.classic.html.HTMLLayout">
>>
<pattern>%date%contextName%thread%-5level%-55logger{55}%mdc%marker%msg</pattern>
>>
>>
<throwableRenderer
>> class="ch.qos.logback.classic.html.DefaultThrowableRenderer"
>>/>
>> </layout>
>> <SMTPHost>${mail.host.name}</SMTPHost>
>>
<SMTPPort>${mail.port.number}</SMTPPort>
>> <From>${batch.email.address.from}</From>
>>
<To>${batch.email.address.to.cmrdevelopers}</To>
>> <Subject>${batch.email.subject.prefix}Log
Email:
>>%msg</Subject>
>> <evaluator
>>class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
>>
<marker>EMAIL_DEVS</marker>
>> </evaluator>
>> </appender>
>>
>>
>>
It hangs on call to SocketInputStream.socketRead0(),
>>which is a native
>> method. Anyone
seen/solved this before?
>>
>> The timeout value is 0 on the socket read (means wait
>>forever), so it is
>> waiting for a response to read.
>>
>>
>>
>>
While I'm trying to resolve this, one thing I'd like to
>>do is set the
>> timeout value so at least
it doesn't hang. I'm not sure
>>how to do that
>> with SMTPAppender -
>> anyone know how?
The SMTPAppender/SMTPAppenderBase
>>class does not
>> have a timeout property, but SMTPAppenderBase
does pull
>>system
>> properties. I'm hoping there is a config file-based
>>approach to do
this
>> though...
>>
>>
>>
>>
>> The following is a call stack
captured in the Eclipse
>>debugger; the next
>> line-step would go into socketRead0() and
hang.
>>
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
>>at
>>
localhost:3598
>> Thread [main] (Suspended)
>> SocketInputStream.read(byte[],
int, int)
>>line: 129
>> TraceInputStream.read(byte[], int, int)
>>line:
97
>> BufferedInputStream.fill() line: 218
>> BufferedInputStream.read()
line: 237
>> LineInputStream.readLine() line: 75
>>
SMTPTransport.readServerResponse() line:
>>1440
>> SMTPTransport.openServer(String, int)
line:
>>1260
>> SMTPTransport.protocolConnect(String, int,
>>String,
String)
>> line: 370
>> SMTPTransport(Service).connect(String, int,
>>String,
String)
>> line: 275
>> SMTPTransport(Service).connect(String,
>>String,
String)
>> line: 156
>> SMTPTransport(Service).connect() line: 105
>>
Transport.send0(Message, Address[]) line:
>>168
>> Transport.send(Message) line:
98
>> SMTPAppender(SMTPAppenderBase<E>).sendBuffer(E)
>>line: 292
>>
SMTPAppender(SMTPAppenderBase<E>).append(E)
>>line: 159
>>
SMTPAppender(AppenderBase<E>).doAppend(E)
>>line: 85
>>
AppenderAttachableImpl<E>.appendLoopOnAppenders(E)
>>line: 64
>>
Logger.appendLoopOnAppenders(ILoggingEvent)
>>line: 283
>>
Logger.callAppenders(ILoggingEvent) line:
>>270
>> Logger.buildLoggingEventAndAppend(String,
>>Marker, Level,
>> String, Object[], Throwable) line: 471
>>
Logger.filterAndLog_0_Or3Plus(String,
>>Marker, Level,
>> String, Object[], Throwable) line:
425
>> Logger.error(Marker, String) line: 592
>>
LoggerEmailTest.testEmailSend() line: 99
>> NativeMethodAccessorImpl.invoke0(Method,
>>Object, Object[])
>> line: not available [native method]
>>
NativeMethodAccessorImpl.invoke(Object,
>>Object[]) line: 39
>>
DelegatingMethodAccessorImpl.invoke(Object,
>>Object[]) line: 25
>>
Method.invoke(Object, Object...) line: 597
>> FrameworkMethod$1.runReflectiveCall() line:
>>44
>> FrameworkMethod$1(ReflectiveCallable).run()
>>line: 15
>>
FrameworkMethod.invokeExplosively(Object,
>>Object...) line: 41
>>
InvokeMethod.evaluate() line: 20
>> RunBefores.evaluate() line: 28
>>
RunBeforeTestMethodCallbacks.evaluate()
>>line: 74
>> RunAfters.evaluate() line:
31
>> RunAfterTestMethodCallbacks.evaluate()
>>line: 82
>>
SpringRepeat.evaluate() line: 72
>> SpringJUnit4ClassRunner.runChild(FrameworkMethod,
>>
RunNotifier) line: 240
>>
>> SpringJUnit4ClassRunner(BlockJUnit4ClassRunner).runChild(Object,
>>
RunNotifier) line: 50
>> ParentRunner$3.run() line: 193
>>
ParentRunner$1.schedule(Runnable) line: 52
>>
>> SpringJUnit4ClassRunner(ParentRunner<T>).runChildren(RunNotifier)
>>line: 191
>> ParentRunner<T>.access$000(ParentRunner,
>>RunNotifier)
line: 42
>> ParentRunner$2.evaluate() line: 184
>>
RunBeforeTestClassCallbacks.evaluate()
>>line: 61
>> RunAfterTestClassCallbacks.evaluate()
line:
>>70
>> SpringJUnit4ClassRunner(ParentRunner<T>).run(RunNotifier)
>>
line: 236
>> SpringJUnit4ClassRunner.run(RunNotifier)
>>line:
180
>>
>> JUnit4TestClassReference(JUnit4TestReference).run(TestExecution)
>>line:
46
>> TestExecution.run(ITestReference[]) line:
>>38
>>
RemoteTestRunner.runTests(String[], String,
>>TestExecution)
>> line: 467
>>
RemoteTestRunner.runTests(TestExecution)
>>line: 683
>> RemoteTestRunner.run() line:
390
>> RemoteTestRunner.main(String[]) line: 197
>> Thread [ReaderThread]
(Running)
>> Thread [org.subethamail.smtp.server.SMTPServer]
>>(Running)
>>
Thread
>>[org.subethamail.smtp.server.Session-/127.0.0.1:3601]
>> (Running)
>>
>
> _______________________________________________
> Logback-user mailing list
>
Logback-user@qos.ch
> http://qos.ch/mailman/listinfo/logback-user
>