Skip to content

Commit

Permalink
[AETHER-75] Add command to force snapshot of Raft partitions.
Browse files Browse the repository at this point in the history
Change-Id: I1e79967e3dcbf353749b6a1e524ce71c763ca588
  • Loading branch information
Jordan Halterman authored and pierventre committed Apr 6, 2021
1 parent e91c87f commit f17d173
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright 2015-present Open Networking Foundation
*
* 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.cli.net;

import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.Option;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.cluster.PartitionId;
import org.onosproject.store.primitives.PartitionAdminService;

/**
* Command to force a snapshot of the partitions.
*/
@Service
@Command(scope = "onos", name = "snapshot-partitions",
description = "Force snapshot partitions")
public class PartitionsSnapshotCommand extends AbstractShellCommand {

@Option(name = "-p", aliases = "--partition",
description = "The partition to snapshot",
required = false, multiValued = false)
private Integer partitionId;

@Override
protected void doExecute() {
PartitionAdminService partitionAdminService = get(PartitionAdminService.class);
if (partitionId != null) {
partitionAdminService.snapshot(PartitionId.from(partitionId));
} else {
partitionAdminService.snapshot();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.util.List;

import org.onosproject.cluster.PartitionId;
import org.onosproject.store.service.PartitionClientInfo;
import org.onosproject.store.service.PartitionInfo;

Expand All @@ -36,4 +37,16 @@ public interface PartitionAdminService {
* @return list of {@code PartitionClientInfo}
*/
List<PartitionClientInfo> partitionClientInfo();

/**
* Takes a snapshot of all partitions.
*/
void snapshot();

/**
* Takes a snapshot of the given partition.
*
* @param partitionId the partition to snapshot
*/
void snapshot(PartitionId partitionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,23 @@ public List<PartitionClientInfo> partitionClientInfo() {
.collect(Collectors.toList())))
.collect(Collectors.toList());
}

@Override
public void snapshot() {
checkPermission(PARTITION_READ);
if (partitionGroup != null) {
partitionGroup.snapshot().join();
}
}

@Override
public void snapshot(PartitionId partitionId) {
checkPermission(PARTITION_READ);
io.atomix.primitive.partition.PartitionId atomixPartitionId =
io.atomix.primitive.partition.PartitionId.from(partitionGroup.name(), partitionId.id());
if (partitionGroup != null &&
partitionGroup.getPartition(atomixPartitionId) != null) {
partitionGroup.snapshot(atomixPartitionId).join();
}
}
}

0 comments on commit f17d173

Please sign in to comment.