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

/**
 * This aspect is used for NOT starting the job initialization threads of the capacity scheduler.
 * We schedule the body of these threads manually from the SimulatorJobTracker according to 
 * simulation time.
 */
 
public aspect JobInitializationPollerAspects {

  pointcut overrideInitializationThreadStarts () : 
    (target (JobInitializationPoller) || 
     target (JobInitializationPoller.JobInitializationThread)) && 
    call (public void start());
  
  void around() : overrideInitializationThreadStarts () {
    // no-op
  }
  
  
}
