From 40fd067185aafea2a7da7e4fd0b1111dc2bbb9bd Mon Sep 17 00:00:00 2001 From: Dominik Vrbovsky Date: Fri, 10 Sep 2021 11:09:41 +0200 Subject: [PATCH] Introduce cli commands for cluster-admin Rework the rpcs needed by csit in cluster-admin to karaf cli commands JIRA: CONTROLLER-1996 Change-Id: I148c7c9140701ff8ffe81c612999898115f4661d Signed-off-by: Dominik Vrbovsky --- artifacts/pom.xml | 5 ++ features/odl-clustering-test-app/pom.xml | 4 ++ opendaylight/md-sal/pom.xml | 1 + .../sal-cluster-admin-karaf-cli/pom.xml | 51 ++++++++++++++++++ .../admin/command/AbstractRpcAction.java | 33 ++++++++++++ .../command/ActivateEosDatacenterCommand.java | 30 +++++++++++ .../AddReplicasForAllShardsCommand.java | 31 +++++++++++ .../admin/command/AddShardReplicaCommand.java | 39 ++++++++++++++ .../admin/command/BackupDatastoreCommand.java | 39 ++++++++++++++ ...MemberVotingStatesForAllShardsCommand.java | 47 ++++++++++++++++ ...angeMemberVotingStatesForShardCommand.java | 54 +++++++++++++++++++ .../DeactivateEosDatacenterCommand.java | 31 +++++++++++ ...MemberVotingStatesForAllShardsCommand.java | 31 +++++++++++ .../GetKnownClientsForAllShardsCommand.java | 31 +++++++++++ .../admin/command/GetShardRoleCommand.java | 39 ++++++++++++++ .../admin/command/LocateShardCommand.java | 39 ++++++++++++++ .../admin/command/MakeLeaderLocalCommand.java | 39 ++++++++++++++ .../RemoveAllShardReplicasCommand.java | 36 +++++++++++++ .../command/RemoveShardReplicaCommand.java | 42 +++++++++++++++ 19 files changed, 622 insertions(+) create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/pom.xml create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AbstractRpcAction.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java create mode 100644 opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 620476d498..c1b6fb27fa 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -136,6 +136,11 @@ sal-cluster-admin-impl ${project.version} + + org.opendaylight.controller + sal-cluster-admin-karaf-cli + ${project.version} + org.opendaylight.controller cds-dom-api diff --git a/features/odl-clustering-test-app/pom.xml b/features/odl-clustering-test-app/pom.xml index 9e82988c7e..55d7c85fef 100644 --- a/features/odl-clustering-test-app/pom.xml +++ b/features/odl-clustering-test-app/pom.xml @@ -43,5 +43,9 @@ org.opendaylight.controller.samples clustering-it-karaf-cli + + org.opendaylight.controller + sal-cluster-admin-karaf-cli + diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index 6e348f0ab6..c088c934d3 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -46,6 +46,7 @@ sal-dummy-distributed-datastore sal-cluster-admin-api sal-cluster-admin-impl + sal-cluster-admin-karaf-cli eos-dom-akka diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/pom.xml b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/pom.xml new file mode 100644 index 0000000000..2b1eca5fff --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/pom.xml @@ -0,0 +1,51 @@ + + + + mdsal-parent + org.opendaylight.controller + 4.0.4-SNAPSHOT + ../parent/pom.xml + + 4.0.0 + + sal-cluster-admin-karaf-cli + bundle + + + + org.apache.karaf.shell + org.apache.karaf.shell.core + provided + + + org.opendaylight.controller + sal-cluster-admin-impl + + + org.opendaylight.mdsal + mdsal-binding-api + + + + + + + org.apache.karaf.tooling + karaf-services-maven-plugin + ${karaf.version} + + + service-metadata-generate + process-classes + + service-metadata-generate + + + + + + + + diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AbstractRpcAction.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AbstractRpcAction.java new file mode 100644 index 0000000000..0a85b562eb --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AbstractRpcAction.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + + +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.ExecutionException; +import org.apache.karaf.shell.api.action.Action; +import org.opendaylight.yangtools.yang.common.RpcResult; + + +/** + * Common base class for all commands which end up invoking an RPC. + */ +public abstract class AbstractRpcAction implements Action { + @Override + @SuppressWarnings("checkstyle:RegexpSinglelineJava") + public final Object execute() throws InterruptedException, ExecutionException { + final RpcResult result = invokeRpc().get(); + if (!result.isSuccessful()) { + // FIXME: is there a better way to report errors? + System.out.println("Invocation failed: " + result.getErrors()); + } + return null; + } + + protected abstract ListenableFuture> invokeRpc(); +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java new file mode 100644 index 0000000000..6f7b8d4522 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "activate-eos-datacenter", description = "Run an activate-eos-datacenter test") +public class ActivateEosDatacenterCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .activateEosDatacenter(new ActivateEosDatacenterInputBuilder().build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java new file mode 100644 index 0000000000..5189f08efc --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "add-replicas-for-all-shards", + description = "Run an add-replicas-for-all-shards test") +public class AddReplicasForAllShardsCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .addReplicasForAllShards(new AddReplicasForAllShardsInputBuilder().build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java new file mode 100644 index 0000000000..77c039e9a3 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "add-shard-replica", description = "Run an add-shard-replica test") +public class AddShardReplicaCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .addShardReplica(new AddShardReplicaInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java new file mode 100644 index 0000000000..9574bc0eda --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.Uint32; + +@Service +@Command(scope = "cluster-admin", name = "backup-datastore", description = "Run a backup-datastore test") +public class BackupDatastoreCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "file-path", required = true) + private String filePath; + @Argument(index = 1, name = "timeout", required = true) + private long timeout; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .backupDatastore(new BackupDatastoreInputBuilder() + .setFilePath(filePath) + .setTimeout(Uint32.valueOf(timeout)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java new file mode 100644 index 0000000000..d8fb0a4232 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import java.util.List; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingStateBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + + +@Service +@Command(scope = "cluster-admin", name = "change-member-voting-states-for-all-shards", + description = "Run a change-member-voting-states-for-all-shards test") +public class ChangeMemberVotingStatesForAllShardsCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "member-name", required = true) + private String memberName; + @Argument(index = 1, name = "voting", required = true) + private boolean voting; + + @Override + protected ListenableFuture> invokeRpc() { + final MemberVotingState memberVotingState = new MemberVotingStateBuilder() + .setMemberName(memberName) + .setVoting(voting) + .build(); + + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .changeMemberVotingStatesForAllShards(new ChangeMemberVotingStatesForAllShardsInputBuilder() + .setMemberVotingState(List.of(memberVotingState)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java new file mode 100644 index 0000000000..cbfd5704af --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + + +import com.google.common.util.concurrent.ListenableFuture; +import java.util.List; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingStateBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "change-member-voting-states-for-shard", + description = "Run a change-member-voting-states-for-shard test") +public class ChangeMemberVotingStatesForShardCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + @Argument(index = 2, name = "member-name", required = true) + private String memberName; + @Argument(index = 3, name = "voting", required = true) + private boolean voting; + + @Override + protected ListenableFuture> invokeRpc() { + final MemberVotingState memberVotingState = new MemberVotingStateBuilder() + .setMemberName(memberName) + .setVoting(voting) + .build(); + + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .setMemberVotingState(List.of(memberVotingState)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java new file mode 100644 index 0000000000..e0fd59ddf8 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenterInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "deactivate-eos-datacenter", + description = "Run a deactivate-eos-datacenter test") +public class DeactivateEosDatacenterCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .deactivateEosDatacenter(new DeactivateEosDatacenterInputBuilder().build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java new file mode 100644 index 0000000000..ac523ac2cd --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin",name = "flip-member-voting-states-for-all-shards", + description = "Run a flip-member-voting-states-for-all-shards test") +public class FlipMemberVotingStatesForAllShardsCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .flipMemberVotingStatesForAllShards(new FlipMemberVotingStatesForAllShardsInputBuilder().build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java new file mode 100644 index 0000000000..be55c006ad --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShardsInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "get-known-clients-for-all-shards", + description = "Run a get-known-clients-for-all-shards test") +public class GetKnownClientsForAllShardsCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .getKnownClientsForAllShards(new GetKnownClientsForAllShardsInputBuilder().build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java new file mode 100644 index 0000000000..8e914279ea --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRoleInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "get-shard-role", description = "Run a get-shard-role test") +public class GetShardRoleCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .getShardRole(new GetShardRoleInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java new file mode 100644 index 0000000000..13d99a8e03 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShardInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "locate-shard", description = "Run a locate-shard test") +public class LocateShardCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .locateShard(new LocateShardInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java new file mode 100644 index 0000000000..3b1c1453d0 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "make-leader-local", description = "Run a make-leader-local test") +public class MakeLeaderLocalCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .makeLeaderLocal(new MakeLeaderLocalInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java new file mode 100644 index 0000000000..97f3a79eb1 --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "remove-all-shard-replicas", + description = "Run a remove-all-shard-replicas test") +public class RemoveAllShardReplicasCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "member-name",required = true) + private String memberName; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .removeAllShardReplicas(new RemoveAllShardReplicasInputBuilder() + .setMemberName(memberName) + .build()); + } +} diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java new file mode 100644 index 0000000000..e4a786432b --- /dev/null +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.datastore.admin.command; + +import com.google.common.util.concurrent.ListenableFuture; +import org.apache.karaf.shell.api.action.Argument; +import org.apache.karaf.shell.api.action.Command; +import org.apache.karaf.shell.api.action.lifecycle.Reference; +import org.apache.karaf.shell.api.action.lifecycle.Service; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplicaInputBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; + +@Service +@Command(scope = "cluster-admin", name = "remove-shard-replica", description = "Run a remove-shard-replica") +public class RemoveShardReplicaCommand extends AbstractRpcAction { + @Reference + private RpcConsumerRegistry rpcConsumerRegistry; + @Argument(index = 0, name = "shard-name", required = true) + private String shardName; + @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") + private String dataStoreType; + @Argument(index = 2, name = "member-name", required = true) + private String memberName; + + @Override + protected ListenableFuture> invokeRpc() { + return rpcConsumerRegistry.getRpcService(ClusterAdminService.class) + .removeShardReplica(new RemoveShardReplicaInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.forName(dataStoreType).orElse(null)) + .setMemberName(memberName) + .build()); + } +} -- 2.36.6