org.apache.falcon.execution.SchedulerUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.falcon.execution.SchedulerUtil.java

Source

/**
 * 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.execution;

import org.apache.falcon.entity.v0.Frequency;
import org.apache.falcon.util.RuntimeProperties;
import org.joda.time.DateTime;

/**
 * Contains utility methods.
 */
public final class SchedulerUtil {

    private static final long MINUTE_IN_MS = 60 * 1000L;
    private static final long HOUR_IN_MS = 60 * MINUTE_IN_MS;
    public static final String MINUTELY_PROCESS_FREQUENCY_POLLING_IN_MILLIS = "falcon.scheduler.minutely.process.polling.frequency.millis";
    public static final String HOURLY_PROCESS_FREQUENCY_POLLING_IN_MILLIS = "falcon.scheduler.hourly.process.polling.frequency.millis";
    public static final String DAILY_PROCESS_FREQUENCY_POLLING_IN_MILLIS = "falcon.scheduler.daily.process.polling.frequency.millis";
    public static final String MONTHLY_PROCESS_FREQUENCY_POLLING_IN_MILLIS = "falcon.scheduler.monthly.process.polling.frequency.millis";

    private SchedulerUtil() {
    };

    /**
     * Returns the frequency in millis from the given time.
     * Needs to take the calender into account.
     * @param referenceTime
     * @param frequency
     * @return
     */
    public static long getFrequencyInMillis(DateTime referenceTime, Frequency frequency) {
        switch (frequency.getTimeUnit()) {
        case minutes:
            return MINUTE_IN_MS * frequency.getFrequencyAsInt();
        case hours:
            return HOUR_IN_MS * frequency.getFrequencyAsInt();
        case days:
            return referenceTime.plusDays(frequency.getFrequencyAsInt()).getMillis() - referenceTime.getMillis();
        case months:
            return referenceTime.plusMonths(frequency.getFrequencyAsInt()).getMillis() - referenceTime.getMillis();
        default:
            throw new IllegalArgumentException("Invalid time unit " + frequency.getTimeUnit().name());
        }
    }

    /**
     *
     * @param frequency
     * @return
     */
    public static long getPollingFrequencyinMillis(Frequency frequency) {
        switch (frequency.getTimeUnit()) {
        case minutes:
            return Long.parseLong(
                    RuntimeProperties.get().getProperty(MINUTELY_PROCESS_FREQUENCY_POLLING_IN_MILLIS, "20000"));
        case hours:
            return Long.parseLong(
                    RuntimeProperties.get().getProperty(HOURLY_PROCESS_FREQUENCY_POLLING_IN_MILLIS, "60000"));
        case days:
            return Long.parseLong(
                    RuntimeProperties.get().getProperty(DAILY_PROCESS_FREQUENCY_POLLING_IN_MILLIS, "120000"));
        case months:
            return Long.parseLong(
                    RuntimeProperties.get().getProperty(MONTHLY_PROCESS_FREQUENCY_POLLING_IN_MILLIS, "180000"));
        default:
            throw new IllegalArgumentException("Unhandled frequency time unit " + frequency.getTimeUnit());
        }
    }

}