blob: db28826f9a4b755c881b3509d6d3b62e51e16a6f [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
21import org.apache.commons.lang3.tuple.ImmutablePair;
22import org.apache.commons.lang3.tuple.Pair;
23import org.onlab.util.KryoNamespace;
Madan Jampani63c659f2015-06-11 00:52:58 -070024import org.onosproject.cluster.NodeId;
Madan Jampani393e0f02015-02-12 07:35:39 +053025import org.onosproject.store.serializers.KryoNamespaces;
26import org.onosproject.store.serializers.KryoSerializer;
Madan Jampanibff6d8f2015-03-31 16:53:47 -070027import org.onosproject.store.service.DatabaseUpdate;
28import org.onosproject.store.service.Transaction;
Madan Jampani393e0f02015-02-12 07:35:39 +053029import org.onosproject.store.service.Versioned;
30
31import net.kuujo.copycat.cluster.internal.MemberInfo;
Madan Jampanied1b7fc2015-04-27 23:30:07 -070032import net.kuujo.copycat.raft.protocol.AppendRequest;
33import net.kuujo.copycat.raft.protocol.AppendResponse;
34import net.kuujo.copycat.raft.protocol.CommitRequest;
35import net.kuujo.copycat.raft.protocol.CommitResponse;
36import net.kuujo.copycat.raft.protocol.PollRequest;
37import net.kuujo.copycat.raft.protocol.PollResponse;
38import net.kuujo.copycat.raft.protocol.QueryRequest;
39import net.kuujo.copycat.raft.protocol.QueryResponse;
40import net.kuujo.copycat.raft.protocol.ReplicaInfo;
41import net.kuujo.copycat.raft.protocol.SyncRequest;
42import net.kuujo.copycat.raft.protocol.SyncResponse;
43import net.kuujo.copycat.raft.protocol.VoteRequest;
44import net.kuujo.copycat.raft.protocol.VoteResponse;
Madan Jampani393e0f02015-02-12 07:35:39 +053045import net.kuujo.copycat.util.serializer.SerializerConfig;
46
47/**
48 * Serializer for DatabaseManager's interaction with Copycat.
49 */
50public class DatabaseSerializer extends SerializerConfig {
51
52 private static final KryoNamespace COPYCAT = KryoNamespace.newBuilder()
53 .nextId(KryoNamespace.FLOATING_ID)
54 .register(AppendRequest.class)
55 .register(AppendResponse.class)
56 .register(SyncRequest.class)
57 .register(SyncResponse.class)
Madan Jampanied1b7fc2015-04-27 23:30:07 -070058 .register(VoteRequest.class)
59 .register(VoteResponse.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053060 .register(PollRequest.class)
61 .register(PollResponse.class)
62 .register(QueryRequest.class)
63 .register(QueryResponse.class)
64 .register(CommitRequest.class)
65 .register(CommitResponse.class)
66 .register(ReplicaInfo.class)
67 .register(MemberInfo.class)
68 .build();
69
70 private static final KryoNamespace ONOS_STORE = KryoNamespace.newBuilder()
71 .nextId(KryoNamespace.FLOATING_ID)
72 .register(Versioned.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070073 .register(DatabaseUpdate.class)
74 .register(DatabaseUpdate.Type.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053075 .register(Pair.class)
76 .register(ImmutablePair.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070077 .register(Result.class)
Madan Jampani346d4f52015-05-04 11:09:39 -070078 .register(UpdateResult.class)
Madan Jampanibff6d8f2015-03-31 16:53:47 -070079 .register(Result.Status.class)
80 .register(DefaultTransaction.class)
81 .register(Transaction.State.class)
Madan Jampani63c659f2015-06-11 00:52:58 -070082 .register(NodeId.class)
Madan Jampani393e0f02015-02-12 07:35:39 +053083 .build();
84
85 private static final KryoSerializer SERIALIZER = new KryoSerializer() {
86 @Override
87 protected void setupKryoPool() {
88 serializerPool = KryoNamespace.newBuilder()
89 .register(KryoNamespaces.BASIC)
90 .register(COPYCAT)
91 .register(ONOS_STORE)
92 .build();
93 }
94 };
95
96 @Override
97 public ByteBuffer writeObject(Object object) {
98 return ByteBuffer.wrap(SERIALIZER.encode(object));
99 }
100
101 @Override
102 public <T> T readObject(ByteBuffer buffer) {
103 return SERIALIZER.decode(buffer);
104 }
105}