blob: dc3b9689d6e87c0241eb7729a743c85e92341b7f [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
tom1d416c52014-09-29 20:55:24 -070014/**
15 * Factory for parsing messages sent between cluster members.
16 */
tom81583142014-09-30 01:40:29 -070017@Component(immediate = true)
18@Service
tom1d416c52014-09-29 20:55:24 -070019public class MessageSerializer implements SerializationService {
20
tom81583142014-09-30 01:40:29 -070021 private final Logger log = LoggerFactory.getLogger(getClass());
22
tomd33e6402014-09-30 03:14:43 -070023 private static final int METADATA_LENGTH = 12; // 8 + 4
24 private static final int LENGTH_OFFSET = 8;
tom1d416c52014-09-29 20:55:24 -070025
26 private static final long MARKER = 0xfeedcafebeaddeadL;
27
tomd33e6402014-09-30 03:14:43 -070028 private KryoPool serializerPool;
29
30 @Activate
31 public void activate() {
32 setupKryoPool();
33 log.info("Started");
34 }
35
36 @Deactivate
37 public void deactivate() {
38 log.info("Stopped");
39 }
40
41 /**
42 * Sets up the common serialzers pool.
43 */
44 protected void setupKryoPool() {
tomd33e6402014-09-30 03:14:43 -070045 serializerPool = KryoPool.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070046 .register(KryoPoolUtil.API)
47 // TODO: Should MessageSubject be in API bundle?
48 .register(MessageSubject.class)
tomd33e6402014-09-30 03:14:43 -070049 .build()
50 .populate(1);
51 }
52
53
tom1d416c52014-09-29 20:55:24 -070054 @Override
Madan Jampani890bc352014-10-01 22:35:29 -070055 public Object decode(byte[] data) {
56 return serializerPool.deserialize(data);
tom1d416c52014-09-29 20:55:24 -070057 }
58
59 @Override
Madan Jampani890bc352014-10-01 22:35:29 -070060 public byte[] encode(Object payload) {
61 return serializerPool.serialize(payload);
tom1d416c52014-09-29 20:55:24 -070062 }
Yuta HIGUCHIc99a8d32014-10-02 17:16:34 -070063}