blob: b457b7810f46de69e8a233490c277f61dcb205f1 [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 Jampani63c659f2015-06-11 00:52:58 -070022import org.onosproject.cluster.NodeId;
Madan Jampani393e0f02015-02-12 07:35:39 +053023import org.onosproject.store.serializers.KryoNamespaces;
24import org.onosproject.store.serializers.KryoSerializer;
Madan Jampanibff6d8f2015-03-31 16:53:47 -070025import org.onosproject.store.service.DatabaseUpdate;
26import org.onosproject.store.service.Transaction;
Madan Jampani393e0f02015-02-12 07:35:39 +053027import org.onosproject.store.service.Versioned;
28
29import net.kuujo.copycat.cluster.internal.MemberInfo;
Madan Jampanied1b7fc2015-04-27 23:30:07 -070030import net.kuujo.copycat.raft.protocol.AppendRequest;
31import net.kuujo.copycat.raft.protocol.AppendResponse;
32import net.kuujo.copycat.raft.protocol.CommitRequest;
33import net.kuujo.copycat.raft.protocol.CommitResponse;
34import net.kuujo.copycat.raft.protocol.PollRequest;
35import net.kuujo.copycat.raft.protocol.PollResponse;
36import net.kuujo.copycat.raft.protocol.QueryRequest;
37import net.kuujo.copycat.raft.protocol.QueryResponse;
38import net.kuujo.copycat.raft.protocol.ReplicaInfo;
39import net.kuujo.copycat.raft.protocol.SyncRequest;
40import net.kuujo.copycat.raft.protocol.SyncResponse;
41import net.kuujo.copycat.raft.protocol.VoteRequest;
42import net.kuujo.copycat.raft.protocol.VoteResponse;
Madan Jampani393e0f02015-02-12 07:35:39 +053043import net.kuujo.copycat.util.serializer.SerializerConfig;
44
45/**
46 * Serializer for DatabaseManager's interaction with Copycat.
47 */
48public class DatabaseSerializer extends SerializerConfig {
49
50 private static final KryoNamespace COPYCAT = KryoNamespace.newBuilder()
51 .nextId(KryoNamespace.FLOATING_ID)
52 .register(AppendRequest.class)
53 .register(AppendResponse.class)
54 .register(SyncRequest.class)
55 .register(SyncResponse.class)
Madan Jampanied1b7fc2015-04-27 23:30:07 -070056 .register(VoteRequest.class)
57 .register(VoteResponse.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053058 .register(PollRequest.class)
59 .register(PollResponse.class)
60 .register(QueryRequest.class)
61 .register(QueryResponse.class)
62 .register(CommitRequest.class)
63 .register(CommitResponse.class)
64 .register(ReplicaInfo.class)
65 .register(MemberInfo.class)
66 .build();
67
68 private static final KryoNamespace ONOS_STORE = KryoNamespace.newBuilder()
69 .nextId(KryoNamespace.FLOATING_ID)
70 .register(Versioned.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070071 .register(DatabaseUpdate.class)
72 .register(DatabaseUpdate.Type.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070073 .register(Result.class)
Madan Jampani346d4f52015-05-04 11:09:39 -070074 .register(UpdateResult.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070075 .register(Result.Status.class)
76 .register(DefaultTransaction.class)
77 .register(Transaction.State.class)
Madan Jampani7804c992015-07-20 13:20:19 -070078 .register(Match.class)
Madan Jampani63c659f2015-06-11 00:52:58 -070079 .register(NodeId.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053080 .build();
81
82 private static final KryoSerializer SERIALIZER = new KryoSerializer() {
83 @Override
84 protected void setupKryoPool() {
85 serializerPool = KryoNamespace.newBuilder()
86 .register(KryoNamespaces.BASIC)
87 .register(COPYCAT)
88 .register(ONOS_STORE)
89 .build();
90 }
91 };
92
93 @Override
94 public ByteBuffer writeObject(Object object) {
95 return ByteBuffer.wrap(SERIALIZER.encode(object));
96 }
97
98 @Override
99 public <T> T readObject(ByteBuffer buffer) {
100 return SERIALIZER.decode(buffer);
101 }
102}