blob: 237c85b54c5672b37afa33a4598da65267144c67 [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;
24import org.onosproject.store.serializers.KryoNamespaces;
25import org.onosproject.store.serializers.KryoSerializer;
26import org.onosproject.store.service.Versioned;
27
28import net.kuujo.copycat.cluster.internal.MemberInfo;
29import net.kuujo.copycat.protocol.rpc.AppendRequest;
30import net.kuujo.copycat.protocol.rpc.AppendResponse;
31import net.kuujo.copycat.protocol.rpc.CommitRequest;
32import net.kuujo.copycat.protocol.rpc.CommitResponse;
33import net.kuujo.copycat.protocol.rpc.PollRequest;
34import net.kuujo.copycat.protocol.rpc.PollResponse;
35import net.kuujo.copycat.protocol.rpc.QueryRequest;
36import net.kuujo.copycat.protocol.rpc.QueryResponse;
37import net.kuujo.copycat.protocol.rpc.ReplicaInfo;
38import net.kuujo.copycat.protocol.rpc.SyncRequest;
39import net.kuujo.copycat.protocol.rpc.SyncResponse;
40import net.kuujo.copycat.util.serializer.SerializerConfig;
41
42/**
43 * Serializer for DatabaseManager's interaction with Copycat.
44 */
45public class DatabaseSerializer extends SerializerConfig {
46
47 private static final KryoNamespace COPYCAT = KryoNamespace.newBuilder()
48 .nextId(KryoNamespace.FLOATING_ID)
49 .register(AppendRequest.class)
50 .register(AppendResponse.class)
51 .register(SyncRequest.class)
52 .register(SyncResponse.class)
53 .register(PollRequest.class)
54 .register(PollResponse.class)
55 .register(QueryRequest.class)
56 .register(QueryResponse.class)
57 .register(CommitRequest.class)
58 .register(CommitResponse.class)
59 .register(ReplicaInfo.class)
60 .register(MemberInfo.class)
61 .build();
62
63 private static final KryoNamespace ONOS_STORE = KryoNamespace.newBuilder()
64 .nextId(KryoNamespace.FLOATING_ID)
65 .register(Versioned.class)
66 .register(Pair.class)
67 .register(ImmutablePair.class)
68 .build();
69
70 private static final KryoSerializer SERIALIZER = new KryoSerializer() {
71 @Override
72 protected void setupKryoPool() {
73 serializerPool = KryoNamespace.newBuilder()
74 .register(KryoNamespaces.BASIC)
75 .register(COPYCAT)
76 .register(ONOS_STORE)
77 .build();
78 }
79 };
80
81 @Override
82 public ByteBuffer writeObject(Object object) {
83 return ByteBuffer.wrap(SERIALIZER.encode(object));
84 }
85
86 @Override
87 public <T> T readObject(ByteBuffer buffer) {
88 return SERIALIZER.decode(buffer);
89 }
90}