/* $Id$ */
/**
* 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.manifoldcf.crawler.interfaces;
import org.apache.manifoldcf.core.interfaces.*;
/** This interface represents functionality that tracks cluster-wide
* reprioritization operations.
* These operations are driven forward by whatever thread needs them,
* and are completed if those processes die by the threads that clean up
* after the original process.
*/
public interface IReprioritizationTracker
{
public static final String _rcsid = "@(#)$Id$";
/** Start a reprioritization activity.
*@param processID is the process ID of the process performing/waiting for the prioritization
* to complete.
*@param reproID is the reprocessing thread ID
*/
public void startReprioritization(String processID, String reproID)
throws ManifoldCFException;
/** Complete a reprioritization activity. Prioritization will be marked as complete
* only if the processID matches the one that started the current reprioritization.
*@param processID is the process ID of the process completing the prioritization.
*/
public void doneReprioritization(String reproID)
throws ManifoldCFException;
/** Check if the specified processID is the one performing reprioritization.
*@param processID is the process ID to check.
*@return the repro ID if the processID is confirmed to be the one.
*/
public String isSpecifiedProcessReprioritizing(String processID)
throws ManifoldCFException;
/** Assess the current minimum depth.
* This method is called to provide information about the priorities of the documents being currently
* queued. It is the case that it is unoptimal to assign document priorities that are fundamentally higher than this value,
* because then the new documents will be preferentially queued, and the goal of distributing documents across bins will not be
* adequately met.
*@param binNamesSet is the current set of priorities we see on the queuing operation.
*/
public void assessMinimumDepth(Double[] binNamesSet)
throws ManifoldCFException;
/** Retrieve current minimum depth.
*@return the current minimum depth to use.
*/
public double getMinimumDepth()
throws ManifoldCFException;
/** Note preload amounts.
*/
public void addPreloadRequest(String connectorClass, String binName, double weightedMinimumDepth);
/** Preload bin values. Call this OUTSIDE of a transaction.
*/
public void preloadBinValues()
throws ManifoldCFException;
/** Clear any preload requests.
*/
public void clearPreloadRequests();
/** Clear remaining preloaded values.
*/
public void clearPreloadedValues();
/** Get a bin value. Must be called INSIDE a transaction.
*@param connectorClass is the connector class name.
*@param binName is the bin name.
*@param weightedMinimumDepth is the minimum depth to use.
*@return the bin value.
*/
public double getIncrementBinValue(String connectorClass, String binName, double weightedMinimumDepth)
throws ManifoldCFException;
}