2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.config;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.ImmutableSet;
13 import java.io.Externalizable;
14 import java.io.IOException;
15 import java.io.ObjectInput;
16 import java.io.ObjectOutput;
17 import java.io.Serializable;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import org.opendaylight.controller.cluster.access.concepts.MemberName;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
24 * Configuration for prefix based shards.
26 public class PrefixShardConfiguration implements Serializable {
27 private static final class Proxy implements Externalizable {
28 private static final long serialVersionUID = 1L;
30 private PrefixShardConfiguration prefixShardConfiguration;
32 // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't
33 // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection.
34 @SuppressWarnings("checkstyle:RedundantModifier")
38 Proxy(final PrefixShardConfiguration prefixShardConfiguration) {
39 this.prefixShardConfiguration = prefixShardConfiguration;
43 public void writeExternal(final ObjectOutput objectOutput) throws IOException {
44 objectOutput.writeObject(prefixShardConfiguration.getPrefix());
45 objectOutput.writeObject(prefixShardConfiguration.getShardStrategyName());
47 objectOutput.writeInt(prefixShardConfiguration.getShardMemberNames().size());
48 for (MemberName name : prefixShardConfiguration.getShardMemberNames()) {
49 name.writeTo(objectOutput);
54 public void readExternal(final ObjectInput objectInput) throws IOException, ClassNotFoundException {
55 final DOMDataTreeIdentifier localPrefix = (DOMDataTreeIdentifier) objectInput.readObject();
56 final String localStrategyName = (String) objectInput.readObject();
58 final int size = objectInput.readInt();
59 final Collection<MemberName> localShardMemberNames = new ArrayList<>(size);
60 for (int i = 0; i < size; i++) {
61 localShardMemberNames.add(MemberName.readFrom(objectInput));
64 prefixShardConfiguration = new PrefixShardConfiguration(localPrefix, localStrategyName,
65 localShardMemberNames);
68 private Object readResolve() {
69 return prefixShardConfiguration;
73 private static final long serialVersionUID = 1L;
75 private final DOMDataTreeIdentifier prefix;
76 private final String shardStrategyName;
77 private final Collection<MemberName> shardMemberNames;
79 public PrefixShardConfiguration(final DOMDataTreeIdentifier prefix,
80 final String shardStrategyName,
81 final Collection<MemberName> shardMemberNames) {
82 this.prefix = Preconditions.checkNotNull(prefix);
83 this.shardStrategyName = Preconditions.checkNotNull(shardStrategyName);
84 this.shardMemberNames = ImmutableSet.copyOf(shardMemberNames);
87 public DOMDataTreeIdentifier getPrefix() {
91 public String getShardStrategyName() {
92 return shardStrategyName;
95 public Collection<MemberName> getShardMemberNames() {
96 return shardMemberNames;
100 public String toString() {
101 return "PrefixShardConfiguration{"
103 + ", shardStrategyName='"
104 + shardStrategyName + '\''
105 + ", shardMemberNames=" + shardMemberNames
109 private Object writeReplace() {
110 return new Proxy(this);