blob: 9af7445de50a52a125a1ccb6029a4fe419615b10 [file] [log] [blame]
Madan Jampani25461112015-02-17 14:17:29 -08001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Madan Jampani393e0f02015-02-12 07:35:39 +053017package org.onosproject.store.consistent.impl;
18
19import java.nio.ByteBuffer;
20
Madan Jampani393e0f02015-02-12 07:35:39 +053021import org.onlab.util.KryoNamespace;
Madan Jampanif2f086c2016-01-13 16:15:39 -080022import org.onlab.util.Match;
Madan Jampani63c659f2015-06-11 00:52:58 -070023import org.onosproject.cluster.NodeId;
Madan Jampani393e0f02015-02-12 07:35:39 +053024import org.onosproject.store.serializers.KryoNamespaces;
25import org.onosproject.store.serializers.KryoSerializer;
Madan Jampanibff6d8f2015-03-31 16:53:47 -070026import org.onosproject.store.service.DatabaseUpdate;
27import org.onosproject.store.service.Transaction;
Madan Jampani393e0f02015-02-12 07:35:39 +053028import org.onosproject.store.service.Versioned;
29
30import net.kuujo.copycat.cluster.internal.MemberInfo;
Madan Jampanied1b7fc2015-04-27 23:30:07 -070031import net.kuujo.copycat.raft.protocol.AppendRequest;
32import net.kuujo.copycat.raft.protocol.AppendResponse;
33import net.kuujo.copycat.raft.protocol.CommitRequest;
34import net.kuujo.copycat.raft.protocol.CommitResponse;
35import net.kuujo.copycat.raft.protocol.PollRequest;
36import net.kuujo.copycat.raft.protocol.PollResponse;
37import net.kuujo.copycat.raft.protocol.QueryRequest;
38import net.kuujo.copycat.raft.protocol.QueryResponse;
39import net.kuujo.copycat.raft.protocol.ReplicaInfo;
40import net.kuujo.copycat.raft.protocol.SyncRequest;
41import net.kuujo.copycat.raft.protocol.SyncResponse;
42import net.kuujo.copycat.raft.protocol.VoteRequest;
43import net.kuujo.copycat.raft.protocol.VoteResponse;
Madan Jampani393e0f02015-02-12 07:35:39 +053044import net.kuujo.copycat.util.serializer.SerializerConfig;
45
46/**
47 * Serializer for DatabaseManager's interaction with Copycat.
48 */
49public class DatabaseSerializer extends SerializerConfig {
50
51 private static final KryoNamespace COPYCAT = KryoNamespace.newBuilder()
52 .nextId(KryoNamespace.FLOATING_ID)
53 .register(AppendRequest.class)
54 .register(AppendResponse.class)
55 .register(SyncRequest.class)
56 .register(SyncResponse.class)
Madan Jampanied1b7fc2015-04-27 23:30:07 -070057 .register(VoteRequest.class)
58 .register(VoteResponse.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053059 .register(PollRequest.class)
60 .register(PollResponse.class)
61 .register(QueryRequest.class)
62 .register(QueryResponse.class)
63 .register(CommitRequest.class)
64 .register(CommitResponse.class)
65 .register(ReplicaInfo.class)
66 .register(MemberInfo.class)
67 .build();
68
69 private static final KryoNamespace ONOS_STORE = KryoNamespace.newBuilder()
70 .nextId(KryoNamespace.FLOATING_ID)
71 .register(Versioned.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070072 .register(DatabaseUpdate.class)
73 .register(DatabaseUpdate.Type.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070074 .register(Result.class)
Madan Jampani346d4f52015-05-04 11:09:39 -070075 .register(UpdateResult.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070076 .register(Result.Status.class)
77 .register(DefaultTransaction.class)
78 .register(Transaction.State.class)
Madan Jampanibab51a42015-08-10 13:53:35 -070079 .register(org.onosproject.store.consistent.impl.CommitResponse.class)
Madan Jampani7804c992015-07-20 13:20:19 -070080 .register(Match.class)
Madan Jampani63c659f2015-06-11 00:52:58 -070081 .register(NodeId.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053082 .build();
83
84 private static final KryoSerializer SERIALIZER = new KryoSerializer() {
85 @Override
86 protected void setupKryoPool() {
87 serializerPool = KryoNamespace.newBuilder()
88 .register(KryoNamespaces.BASIC)
89 .register(COPYCAT)
90 .register(ONOS_STORE)
91 .build();
92 }
93 };
94
95 @Override
96 public ByteBuffer writeObject(Object object) {
97 return ByteBuffer.wrap(SERIALIZER.encode(object));
98 }
99
100 @Override
101 public <T> T readObject(ByteBuffer buffer) {
102 return SERIALIZER.decode(buffer);
103 }
104}