Repository: asterixdb Updated Branches: refs/heads/master c06c7f43a -> 8de799db3
[NO ISSUE][OTH] Add API to Clear Queued Jobs - user model changes: no - storage format changes: no - interface changes: no Details: - Add API to clear queued jobs. - Introduce thread safety annotations. Change-Id: Ibf085f100f7ca06250fbae26d948a037ffe6e857 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2089 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/8de799db Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/8de799db Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/8de799db Branch: refs/heads/master Commit: 8de799db3e4830c18188d9041e422b3e9ebbf739 Parents: c06c7f4 Author: Murtadha Hubail <[email protected]> Authored: Sun Oct 22 20:21:45 2017 +0300 Committer: Murtadha Hubail <[email protected]> Committed: Mon Oct 23 10:10:21 2017 -0700 ---------------------------------------------------------------------- .../hyracks/control/cc/job/IJobManager.java | 5 +++ .../hyracks/control/cc/job/JobManager.java | 5 +++ .../control/cc/scheduler/FIFOJobQueue.java | 8 +++++ .../hyracks/control/cc/scheduler/IJobQueue.java | 4 +++ .../hyracks/util/annotations/NotThreadSafe.java | 34 ++++++++++++++++++ .../annotations/ThreadSafetyGuaranteedBy.java | 36 ++++++++++++++++++++ 6 files changed, 92 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/IJobManager.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/IJobManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/IJobManager.java index a9ddee3..cda3037 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/IJobManager.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/IJobManager.java @@ -125,4 +125,9 @@ public interface IJobManager { * @return the maximum number of jobs to queue before rejecting new jobs */ int getJobQueueCapacity(); + + /** + * Clears all queued jobs + */ + void clearJobQueue(); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java index c6d90a7..fa22dd3 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/job/JobManager.java @@ -286,6 +286,11 @@ public class JobManager implements IJobManager { return ccs.getCCConfig().getJobQueueCapacity(); } + @Override + public void clearJobQueue() { + jobQueue.clear(); + } + private void pickJobsToRun() throws HyracksException { List<JobRun> selectedRuns = jobQueue.pull(); for (JobRun run : selectedRuns) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/FIFOJobQueue.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/FIFOJobQueue.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/FIFOJobQueue.java index 833baac..da13091 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/FIFOJobQueue.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/FIFOJobQueue.java @@ -37,10 +37,14 @@ import org.apache.hyracks.api.job.JobStatus; import org.apache.hyracks.api.job.resource.IJobCapacityController; import org.apache.hyracks.control.cc.job.IJobManager; import org.apache.hyracks.control.cc.job.JobRun; +import org.apache.hyracks.util.annotations.NotThreadSafe; +import org.apache.hyracks.util.annotations.ThreadSafetyGuaranteedBy; /** * An implementation of IJobQueue that gives more priority to jobs that are submitted earlier. */ +@NotThreadSafe +@ThreadSafetyGuaranteedBy("JobManager") public class FIFOJobQueue implements IJobQueue { private static final Logger LOGGER = Logger.getLogger(FIFOJobQueue.class.getName()); @@ -112,4 +116,8 @@ public class FIFOJobQueue implements IJobQueue { return Collections.unmodifiableCollection(jobListMap.values()); } + @Override + public void clear() { + jobListMap.clear(); + } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/IJobQueue.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/IJobQueue.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/IJobQueue.java index e666224..be40883 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/IJobQueue.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/scheduler/IJobQueue.java @@ -69,4 +69,8 @@ public interface IJobQueue { */ Collection<JobRun> jobs(); + /** + * Clears the job queue + */ + void clear(); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/NotThreadSafe.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/NotThreadSafe.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/NotThreadSafe.java new file mode 100644 index 0000000..2d6f7c0 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/NotThreadSafe.java @@ -0,0 +1,34 @@ +/* + * 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.hyracks.util.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * The type to which this annotation is applied is not thread-safe. + */ +@Documented +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.SOURCE) +public @interface NotThreadSafe { +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8de799db/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/ThreadSafetyGuaranteedBy.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/ThreadSafetyGuaranteedBy.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/ThreadSafetyGuaranteedBy.java new file mode 100644 index 0000000..7ca1a94 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/annotations/ThreadSafetyGuaranteedBy.java @@ -0,0 +1,36 @@ +/* + * 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.hyracks.util.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * The type or method to which this annotation is applied to is guaranteed + * to be thread safe by {@link #value()} + */ +@Documented +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.SOURCE) +public @interface ThreadSafetyGuaranteedBy { + String value(); +}
