blob: a7a0df1e163e5fbb37501fce425bc9137628c5a2 [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Laboratory
*
* Licensed 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.onosproject.store.primitives.resources.impl;
import java.util.Collection;
import com.google.common.base.MoreObjects;
import io.atomix.protocols.raft.operation.OperationId;
import io.atomix.protocols.raft.operation.OperationType;
import org.onlab.util.KryoNamespace;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.Task;
import org.onosproject.store.service.WorkQueueStats;
/**
* {@link AtomixWorkQueue} resource state machine operations.
*/
public enum AtomixWorkQueueOperations implements OperationId {
STATS("stats", OperationType.QUERY),
REGISTER("register", OperationType.COMMAND),
UNREGISTER("unregister", OperationType.COMMAND),
ADD("add", OperationType.COMMAND),
TAKE("take", OperationType.COMMAND),
COMPLETE("complete", OperationType.COMMAND),
CLEAR("clear", OperationType.COMMAND);
private final String id;
private final OperationType type;
AtomixWorkQueueOperations(String id, OperationType type) {
this.id = id;
this.type = type;
}
@Override
public String id() {
return id;
}
@Override
public OperationType type() {
return type;
}
public static final KryoNamespace NAMESPACE = KryoNamespace.newBuilder()
.register(KryoNamespaces.BASIC)
.nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID)
.register(Add.class)
.register(Take.class)
.register(Complete.class)
.register(Task.class)
.register(WorkQueueStats.class)
.build("AtomixWorkQueueOperations");
/**
* Work queue operation.
*/
public abstract static class WorkQueueOperation {
}
/**
* Command to add a collection of tasks to the queue.
*/
@SuppressWarnings("serial")
public static class Add extends WorkQueueOperation {
private Collection<byte[]> items;
private Add() {
}
public Add(Collection<byte[]> items) {
this.items = items;
}
public Collection<byte[]> items() {
return items;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.add("items", items)
.toString();
}
}
/**
* Command to take a task from the queue.
*/
@SuppressWarnings("serial")
public static class Take extends WorkQueueOperation {
private int maxTasks;
private Take() {
}
public Take(int maxTasks) {
this.maxTasks = maxTasks;
}
public int maxTasks() {
return maxTasks;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.add("maxTasks", maxTasks)
.toString();
}
}
@SuppressWarnings("serial")
public static class Complete extends WorkQueueOperation {
private Collection<String> taskIds;
private Complete() {
}
public Complete(Collection<String> taskIds) {
this.taskIds = taskIds;
}
public Collection<String> taskIds() {
return taskIds;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.add("taskIds", taskIds)
.toString();
}
}
}