blob: 82472b71bd8c848958956dc7deb1a0d9d03bbd2b [file] [log] [blame]
tomdc66b382014-09-22 17:05:47 -07001package org.onlab.onos.store.impl;
2
tom1a2908c2014-09-23 16:37:39 -07003import com.hazelcast.config.Config;
4import com.hazelcast.config.FileSystemXmlConfig;
tomdc66b382014-09-22 17:05:47 -07005import com.hazelcast.core.Hazelcast;
6import com.hazelcast.core.HazelcastInstance;
tom0872a172014-09-23 11:24:26 -07007import de.javakaffee.kryoserializers.URISerializer;
tomdc66b382014-09-22 17:05:47 -07008import org.apache.felix.scr.annotations.Activate;
9import org.apache.felix.scr.annotations.Component;
10import org.apache.felix.scr.annotations.Deactivate;
11import org.apache.felix.scr.annotations.Service;
tomb41d1ac2014-09-24 01:51:24 -070012import org.onlab.onos.cluster.ControllerNode;
13import org.onlab.onos.cluster.DefaultControllerNode;
14import org.onlab.onos.cluster.NodeId;
tom0872a172014-09-23 11:24:26 -070015import org.onlab.onos.net.DefaultDevice;
16import org.onlab.onos.net.DefaultPort;
17import org.onlab.onos.net.Device;
18import org.onlab.onos.net.DeviceId;
19import org.onlab.onos.net.Element;
20import org.onlab.onos.net.MastershipRole;
21import org.onlab.onos.net.Port;
22import org.onlab.onos.net.PortNumber;
23import org.onlab.onos.net.provider.ProviderId;
tomdc66b382014-09-22 17:05:47 -070024import org.onlab.onos.store.StoreService;
tom0872a172014-09-23 11:24:26 -070025import org.onlab.onos.store.serializers.DefaultPortSerializer;
26import org.onlab.onos.store.serializers.DeviceIdSerializer;
tomb41d1ac2014-09-24 01:51:24 -070027import org.onlab.onos.store.serializers.IpPrefixSerializer;
28import org.onlab.onos.store.serializers.NodeIdSerializer;
tom0872a172014-09-23 11:24:26 -070029import org.onlab.onos.store.serializers.PortNumberSerializer;
30import org.onlab.onos.store.serializers.ProviderIdSerializer;
tomb41d1ac2014-09-24 01:51:24 -070031import org.onlab.packet.IpPrefix;
tom0872a172014-09-23 11:24:26 -070032import org.onlab.util.KryoPool;
tomdc66b382014-09-22 17:05:47 -070033import org.slf4j.Logger;
34import org.slf4j.LoggerFactory;
35
tom1a2908c2014-09-23 16:37:39 -070036import java.io.FileNotFoundException;
tom0872a172014-09-23 11:24:26 -070037import java.net.URI;
38import java.util.ArrayList;
39import java.util.HashMap;
40
tomdc66b382014-09-22 17:05:47 -070041/**
42 * Auxiliary bootstrap of distributed store.
43 */
44@Component(immediate = true)
45@Service
46public class StoreManager implements StoreService {
47
tom1a2908c2014-09-23 16:37:39 -070048 private static final String HAZELCAST_XML_FILE = "etc/hazelcast.xml";
49
tomdc66b382014-09-22 17:05:47 -070050 private final Logger log = LoggerFactory.getLogger(getClass());
51
tom85ff08b2014-09-22 17:14:18 -070052 protected HazelcastInstance instance;
tom0872a172014-09-23 11:24:26 -070053 private KryoPool serializerPool;
54
tomdc66b382014-09-22 17:05:47 -070055
56 @Activate
57 public void activate() {
tom1a2908c2014-09-23 16:37:39 -070058 try {
59 Config config = new FileSystemXmlConfig(HAZELCAST_XML_FILE);
60 instance = Hazelcast.newHazelcastInstance(config);
61 setupKryoPool();
62 log.info("Started");
63 } catch (FileNotFoundException e) {
64 log.error("Unable to configure Hazelcast", e);
65 }
tomdc66b382014-09-22 17:05:47 -070066 }
67
tom0872a172014-09-23 11:24:26 -070068 /**
69 * Sets up the common serialzers pool.
70 */
71 protected void setupKryoPool() {
72 // FIXME Slice out types used in common to separate pool/namespace.
73 serializerPool = KryoPool.newBuilder()
tomb41d1ac2014-09-24 01:51:24 -070074 .register(ArrayList.class,
75 HashMap.class,
tom0872a172014-09-23 11:24:26 -070076
tomb41d1ac2014-09-24 01:51:24 -070077 ControllerNode.State.class,
78 Device.Type.class,
tom0872a172014-09-23 11:24:26 -070079
tomb41d1ac2014-09-24 01:51:24 -070080 DefaultControllerNode.class,
81 DefaultDevice.class,
82 MastershipRole.class,
83 Port.class,
84 Element.class
tom0872a172014-09-23 11:24:26 -070085 )
tomb41d1ac2014-09-24 01:51:24 -070086 .register(IpPrefix.class, new IpPrefixSerializer())
tom0872a172014-09-23 11:24:26 -070087 .register(URI.class, new URISerializer())
tomb41d1ac2014-09-24 01:51:24 -070088 .register(NodeId.class, new NodeIdSerializer())
tom0872a172014-09-23 11:24:26 -070089 .register(ProviderId.class, new ProviderIdSerializer())
90 .register(DeviceId.class, new DeviceIdSerializer())
91 .register(PortNumber.class, new PortNumberSerializer())
92 .register(DefaultPort.class, new DefaultPortSerializer())
93 .build()
94 .populate(10);
95 }
96
tomdc66b382014-09-22 17:05:47 -070097 @Deactivate
98 public void deactivate() {
tom0872a172014-09-23 11:24:26 -070099 instance.shutdown();
tomdc66b382014-09-22 17:05:47 -0700100 log.info("Stopped");
101 }
102
103 @Override
104 public HazelcastInstance getHazelcastInstance() {
105 return instance;
106 }
tom0872a172014-09-23 11:24:26 -0700107
108
109 @Override
110 public byte[] serialize(final Object obj) {
111 return serializerPool.serialize(obj);
112 }
113
114 @Override
115 public <T> T deserialize(final byte[] bytes) {
116 if (bytes == null) {
117 return null;
118 }
119 return serializerPool.deserialize(bytes);
120 }
121
tomdc66b382014-09-22 17:05:47 -0700122}