blob: 2725175e63a2eebc83d75cbe4fa4f4a37f1a816b [file] [log] [blame]
tomdc66b382014-09-22 17:05:47 -07001package org.onlab.onos.store.impl;
2
3import com.hazelcast.core.Hazelcast;
4import com.hazelcast.core.HazelcastInstance;
tom0872a172014-09-23 11:24:26 -07005import de.javakaffee.kryoserializers.URISerializer;
tomdc66b382014-09-22 17:05:47 -07006import org.apache.felix.scr.annotations.Activate;
7import org.apache.felix.scr.annotations.Component;
8import org.apache.felix.scr.annotations.Deactivate;
9import org.apache.felix.scr.annotations.Service;
tom0872a172014-09-23 11:24:26 -070010import org.onlab.onos.net.DefaultDevice;
11import org.onlab.onos.net.DefaultPort;
12import org.onlab.onos.net.Device;
13import org.onlab.onos.net.DeviceId;
14import org.onlab.onos.net.Element;
15import org.onlab.onos.net.MastershipRole;
16import org.onlab.onos.net.Port;
17import org.onlab.onos.net.PortNumber;
18import org.onlab.onos.net.provider.ProviderId;
tomdc66b382014-09-22 17:05:47 -070019import org.onlab.onos.store.StoreService;
tom0872a172014-09-23 11:24:26 -070020import org.onlab.onos.store.serializers.DefaultPortSerializer;
21import org.onlab.onos.store.serializers.DeviceIdSerializer;
22import org.onlab.onos.store.serializers.PortNumberSerializer;
23import org.onlab.onos.store.serializers.ProviderIdSerializer;
24import org.onlab.util.KryoPool;
tomdc66b382014-09-22 17:05:47 -070025import org.slf4j.Logger;
26import org.slf4j.LoggerFactory;
27
tom0872a172014-09-23 11:24:26 -070028import java.net.URI;
29import java.util.ArrayList;
30import java.util.HashMap;
31
tomdc66b382014-09-22 17:05:47 -070032/**
33 * Auxiliary bootstrap of distributed store.
34 */
35@Component(immediate = true)
36@Service
37public class StoreManager implements StoreService {
38
39 private final Logger log = LoggerFactory.getLogger(getClass());
40
tom85ff08b2014-09-22 17:14:18 -070041 protected HazelcastInstance instance;
tom0872a172014-09-23 11:24:26 -070042 private KryoPool serializerPool;
43
tomdc66b382014-09-22 17:05:47 -070044
45 @Activate
46 public void activate() {
47 instance = Hazelcast.newHazelcastInstance();
tom0872a172014-09-23 11:24:26 -070048 setupKryoPool();
tomdc66b382014-09-22 17:05:47 -070049 log.info("Started");
50 }
51
tom0872a172014-09-23 11:24:26 -070052 /**
53 * Sets up the common serialzers pool.
54 */
55 protected void setupKryoPool() {
56 // FIXME Slice out types used in common to separate pool/namespace.
57 serializerPool = KryoPool.newBuilder()
58 .register(
59 ArrayList.class,
60 HashMap.class,
61
62 Device.Type.class,
63
64 DefaultDevice.class,
65 MastershipRole.class,
66 Port.class,
67 Element.class
68 )
69 .register(URI.class, new URISerializer())
70 .register(ProviderId.class, new ProviderIdSerializer())
71 .register(DeviceId.class, new DeviceIdSerializer())
72 .register(PortNumber.class, new PortNumberSerializer())
73 .register(DefaultPort.class, new DefaultPortSerializer())
74 .build()
75 .populate(10);
76 }
77
tomdc66b382014-09-22 17:05:47 -070078 @Deactivate
79 public void deactivate() {
tom0872a172014-09-23 11:24:26 -070080 instance.shutdown();
tomdc66b382014-09-22 17:05:47 -070081 log.info("Stopped");
82 }
83
84 @Override
85 public HazelcastInstance getHazelcastInstance() {
86 return instance;
87 }
tom0872a172014-09-23 11:24:26 -070088
89
90 @Override
91 public byte[] serialize(final Object obj) {
92 return serializerPool.serialize(obj);
93 }
94
95 @Override
96 public <T> T deserialize(final byte[] bytes) {
97 if (bytes == null) {
98 return null;
99 }
100 return serializerPool.deserialize(bytes);
101 }
102
tomdc66b382014-09-22 17:05:47 -0700103}