| /* |
| * 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.ode.scheduler.simple; |
| |
| import java.util.List; |
| |
| /** |
| * Database abstraction; provides all database access for the simple scheduler. |
| * |
| * @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m ) |
| * |
| */ |
| public interface DatabaseDelegate { |
| /** |
| * Save the job in the database. |
| * @param job the job |
| * @param nodeId node assigned to the job (or null if no node has been asssigned) |
| * @param loaded whether the job has been loaded into memory (i.e. in preperation for execution) |
| * @throws DatabaseException in case of error |
| */ |
| boolean insertJob(Job job, String nodeId, boolean loaded) throws DatabaseException ; |
| |
| /** |
| * Delete a job from the database. |
| * @param jobid job identifier |
| * @param nodeId node identifier |
| * @throws DatabaseException in case of error |
| */ |
| boolean deleteJob(String jobid, String nodeId) throws DatabaseException; |
| |
| /** |
| * Return a list of unique nodes identifiers found in the database. This is used |
| * to initialize the list of known nodes when a new node starts up. |
| * @return list of unique node identfiers found in the databaseuniqu |
| */ |
| List<String> getNodeIds() throws DatabaseException; |
| |
| /** |
| * "Dequeue" jobs from the database that are ready for immediate execution; this basically |
| * is a select/delete operation with constraints on the nodeId and scheduled time. |
| * |
| * @param nodeId node identifier of the jobs |
| * @param maxtime only jobs with scheduled time earlier than this will be dequeued |
| * @param maxjobs maximum number of jobs to deqeue |
| * @return list of jobs that met the criteria and were deleted from the database |
| * @throws DatabaseException in case of error |
| */ |
| List<Job> dequeueImmediate(String nodeId, long maxtime, int maxjobs) throws DatabaseException ; |
| |
| /** |
| * Assign a particular node identifier to a fraction of jobs in the database that do not have one, |
| * and are up for execution within a certain time. Only a fraction of the jobs found are assigned |
| * the node identifier. This fraction is determined by the "y" parameter, while membership in the |
| * group (of jobs that get the nodeId) is determined by the "x" parameter. Essentially the logic is: |
| * <code> |
| * UPDATE jobs AS job |
| * WHERE job.scheduledTime before :maxtime |
| * AND job.nodeId is null |
| * AND job.scheduledTime MOD :y == :x |
| * SET job.nodeId = :nodeId |
| * </code> |
| * |
| * @param nodeId node identifier to assign to jobs |
| * @param x the result of the mod-division |
| * @param y the dividend of the mod-division |
| * @param maxtime only jobs with scheduled time earlier than this will be updated |
| * @return number of jobs updated |
| * @throws DatabaseException in case of error |
| */ |
| int updateAssignToNode(String nodeId, int x, int y, long maxtime) throws DatabaseException; |
| |
| /** |
| * Reassign jobs from one node to another. |
| * |
| * @param oldnode node assigning from |
| * @param newnode new node asssigning to |
| * @return number of rows changed |
| * @throws DatabaseException |
| */ |
| int updateReassign(String oldnode, String newnode) throws DatabaseException; |
| } |