[KYUUBI #4836] Set UncaughtExceptionHandler for thread to log exception

### _Why are the changes needed?_

To provide more insight, if there is uncaught exception.
### _How was this patch tested?_
- [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible

- [ ] Add screenshots for manual tests if appropriate

- [x] [Run test](https://kyuubi.readthedocs.io/en/master/develop_tools/testing.html#running-tests) locally before make a pull request

Closes #4836 from turboFei/handler_exception.

Closes #4836

b9d304fb8 [fwang12] comment
3819447a6 [fwang12] un caughtt

Authored-by: fwang12 <fwang12@ebay.com>
Signed-off-by: fwang12 <fwang12@ebay.com>
This commit is contained in:
fwang12 2023-05-15 10:42:56 +08:00
parent e8db3da440
commit 61fcffb7d0
2 changed files with 35 additions and 0 deletions

View File

@ -0,0 +1,28 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.kyuubi.util
import java.lang.Thread.UncaughtExceptionHandler
import org.apache.kyuubi.Logging
class KyuubiUncaughtExceptionHandler extends UncaughtExceptionHandler with Logging {
override def uncaughtException(t: Thread, e: Throwable): Unit = {
error(s"Uncaught exception in thread ${t.getName}", e)
}
}

View File

@ -20,10 +20,17 @@ package org.apache.kyuubi.util
import java.util.concurrent.ThreadFactory
class NamedThreadFactory(name: String, daemon: Boolean) extends ThreadFactory {
import NamedThreadFactory._
override def newThread(r: Runnable): Thread = {
val t = new Thread(r)
t.setName(name + ": Thread-" + t.getId)
t.setDaemon(daemon)
t.setUncaughtExceptionHandler(kyuubiUncaughtExceptionHandler)
t
}
}
object NamedThreadFactory {
private val kyuubiUncaughtExceptionHandler = new KyuubiUncaughtExceptionHandler
}