blob: 07a97bc2f9c2cf4742ba5f242f030cc6540c39d4 [file] [log] [blame]
Yuta HIGUCHIc057c632014-10-06 18:38:14 -07001package org.onlab.onos.store.cluster.messaging.impl;
tom1d416c52014-09-29 20:55:24 -07002
tomd33e6402014-09-30 03:14:43 -07003import org.apache.felix.scr.annotations.Activate;
tom81583142014-09-30 01:40:29 -07004import org.apache.felix.scr.annotations.Component;
tomd33e6402014-09-30 03:14:43 -07005import org.apache.felix.scr.annotations.Deactivate;
tom81583142014-09-30 01:40:29 -07006import org.apache.felix.scr.annotations.Service;
tom1d416c52014-09-29 20:55:24 -07007import org.onlab.onos.store.cluster.messaging.MessageSubject;
8import org.onlab.onos.store.cluster.messaging.SerializationService;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07009import org.onlab.onos.store.serializers.KryoPoolUtil;
tomd33e6402014-09-30 03:14:43 -070010import org.onlab.util.KryoPool;
tom81583142014-09-30 01:40:29 -070011import org.slf4j.Logger;
12import org.slf4j.LoggerFactory;
tom1d416c52014-09-29 20:55:24 -070013
Yuta HIGUCHIa10f3882014-10-11 22:45:07 -070014//FIXME: not used any more? remove
tom1d416c52014-09-29 20:55:24 -070015/**
16 * Factory for parsing messages sent between cluster members.
17 */
tom81583142014-09-30 01:40:29 -070018@Component(immediate = true)
19@Service
tom1d416c52014-09-29 20:55:24 -070020public class MessageSerializer implements SerializationService {
21
tom81583142014-09-30 01:40:29 -070022 private final Logger log = LoggerFactory.getLogger(getClass());
23
tomd33e6402014-09-30 03:14:43 -070024 private static final int METADATA_LENGTH = 12; // 8 + 4
25 private static final int LENGTH_OFFSET = 8;
tom1d416c52014-09-29 20:55:24 -070026
27 private static final long MARKER = 0xfeedcafebeaddeadL;
28
tomd33e6402014-09-30 03:14:43 -070029 private KryoPool serializerPool;
30
31 @Activate
32 public void activate() {
33 setupKryoPool();
34 log.info("Started");
35 }
36
37 @Deactivate
38 public void deactivate() {
39 log.info("Stopped");
40 }
41
42 /**
43 * Sets up the common serialzers pool.
44 */
45 protected void setupKryoPool() {
tomd33e6402014-09-30 03:14:43 -070046 serializerPool = KryoPool.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070047 .register(KryoPoolUtil.API)
48 // TODO: Should MessageSubject be in API bundle?
49 .register(MessageSubject.class)
tomd33e6402014-09-30 03:14:43 -070050 .build()
51 .populate(1);
52 }
53
54
tom1d416c52014-09-29 20:55:24 -070055 @Override
Yuta HIGUCHI53a285d2014-10-06 23:58:01 -070056 public <T> T decode(byte[] data) {
Madan Jampani890bc352014-10-01 22:35:29 -070057 return serializerPool.deserialize(data);
tom1d416c52014-09-29 20:55:24 -070058 }
59
60 @Override
Madan Jampani890bc352014-10-01 22:35:29 -070061 public byte[] encode(Object payload) {
62 return serializerPool.serialize(payload);
tom1d416c52014-09-29 20:55:24 -070063 }
Yuta HIGUCHIc99a8d32014-10-02 17:16:34 -070064}