/** * 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.falcon.adfservice; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * ADF thread pool executor. */ public class ADFScheduledExecutor extends ScheduledThreadPoolExecutor { private static final Logger LOG = LoggerFactory.getLogger(ADFScheduledExecutor.class); public ADFScheduledExecutor(int corePoolSize) { super(corePoolSize); } @Override public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) { return super.scheduleAtFixedRate(wrapRunnable(command), initialDelay, period, unit); } @Override public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { return super.scheduleWithFixedDelay(wrapRunnable(command), initialDelay, delay, unit); } private Runnable wrapRunnable(Runnable command) { return new LogOnExceptionRunnable(command); } private static class LogOnExceptionRunnable implements Runnable { private Runnable runnable; public LogOnExceptionRunnable(Runnable runnable) { super(); this.runnable = runnable; } @Override public void run() { try { runnable.run(); } catch (Throwable t) { LOG.info("Error while executing: {}", t.getMessage()); throw new RuntimeException(t); } } } }