2 * Copyright (c) 2015 Brocade Communications 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
8 package org.opendaylight.controller.cluster.raft;
10 import com.google.common.base.Preconditions;
11 import com.google.protobuf.GeneratedMessage.GeneratedExtension;
12 import java.io.ByteArrayOutputStream;
13 import java.io.IOException;
14 import java.io.ObjectOutputStream;
15 import java.io.Serializable;
16 import java.util.List;
18 import javax.annotation.Nonnull;
19 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
20 import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
25 * Payload data for server configuration log entries.
27 * @author Thomas Pantelis
29 public class ServerConfigurationPayload extends Payload implements Serializable {
30 private static final long serialVersionUID = 1L;
32 private static final Logger LOG = LoggerFactory.getLogger(ServerConfigurationPayload.class);
34 private final List<ServerInfo> serverConfig;
35 private transient int serializedSize = -1;
37 public ServerConfigurationPayload(@Nonnull List<ServerInfo> serverConfig) {
38 this.serverConfig = Preconditions.checkNotNull(serverConfig);
42 public List<ServerInfo> getServerConfig() {
48 if(serializedSize < 0) {
50 ByteArrayOutputStream bos = new ByteArrayOutputStream();
51 ObjectOutputStream out = new ObjectOutputStream(bos);
52 out.writeObject(serverConfig);
55 serializedSize = bos.toByteArray().length;
56 } catch (IOException e) {
58 LOG.error("Error serializing", e);
62 return serializedSize;
67 @SuppressWarnings("rawtypes")
68 public <T> Map<GeneratedExtension, T> encode() {
74 public Payload decode(AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payload) {
79 public String toString() {
80 return "ServerConfigurationPayload [serverConfig=" + serverConfig + "]";
83 public static class ServerInfo implements Serializable {
84 private static final long serialVersionUID = 1L;
86 private final String id;
87 private final boolean isVoting;
89 public ServerInfo(@Nonnull String id, boolean isVoting) {
90 this.id = Preconditions.checkNotNull(id);
91 this.isVoting = isVoting;
95 public String getId() {
99 public boolean isVoting() {
104 public int hashCode() {
105 final int prime = 31;
107 result = prime * result + (isVoting ? 1231 : 1237);
108 result = prime * result + id.hashCode();
113 public boolean equals(Object obj) {
114 if (obj == null || getClass() != obj.getClass()) {
118 ServerInfo other = (ServerInfo) obj;
119 return isVoting == other.isVoting && id.equals(other.id);
123 public String toString() {
124 return "ServerInfo [id=" + id + ", isVoting=" + isVoting + "]";