blob: cfb80a02e557ebbb2aee2705067d87a19a40c9c3 [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;
tom0872a172014-09-23 11:24:26 -070012import org.onlab.onos.net.DefaultDevice;
13import org.onlab.onos.net.DefaultPort;
14import org.onlab.onos.net.Device;
15import org.onlab.onos.net.DeviceId;
16import org.onlab.onos.net.Element;
17import org.onlab.onos.net.MastershipRole;
18import org.onlab.onos.net.Port;
19import org.onlab.onos.net.PortNumber;
20import org.onlab.onos.net.provider.ProviderId;
tomdc66b382014-09-22 17:05:47 -070021import org.onlab.onos.store.StoreService;
tom0872a172014-09-23 11:24:26 -070022import org.onlab.onos.store.serializers.DefaultPortSerializer;
23import org.onlab.onos.store.serializers.DeviceIdSerializer;
24import org.onlab.onos.store.serializers.PortNumberSerializer;
25import org.onlab.onos.store.serializers.ProviderIdSerializer;
26import org.onlab.util.KryoPool;
tomdc66b382014-09-22 17:05:47 -070027import org.slf4j.Logger;
28import org.slf4j.LoggerFactory;
29
tom1a2908c2014-09-23 16:37:39 -070030import java.io.FileNotFoundException;
tom0872a172014-09-23 11:24:26 -070031import java.net.URI;
32import java.util.ArrayList;
33import java.util.HashMap;
34
tomdc66b382014-09-22 17:05:47 -070035/**
36 * Auxiliary bootstrap of distributed store.
37 */
38@Component(immediate = true)
39@Service
40public class StoreManager implements StoreService {
41
tom1a2908c2014-09-23 16:37:39 -070042 private static final String HAZELCAST_XML_FILE = "etc/hazelcast.xml";
43
tomdc66b382014-09-22 17:05:47 -070044 private final Logger log = LoggerFactory.getLogger(getClass());
45
tom85ff08b2014-09-22 17:14:18 -070046 protected HazelcastInstance instance;
tom0872a172014-09-23 11:24:26 -070047 private KryoPool serializerPool;
48
tomdc66b382014-09-22 17:05:47 -070049
50 @Activate
51 public void activate() {
tom1a2908c2014-09-23 16:37:39 -070052 try {
53 Config config = new FileSystemXmlConfig(HAZELCAST_XML_FILE);
54 instance = Hazelcast.newHazelcastInstance(config);
55 setupKryoPool();
56 log.info("Started");
57 } catch (FileNotFoundException e) {
58 log.error("Unable to configure Hazelcast", e);
59 }
tomdc66b382014-09-22 17:05:47 -070060 }
61
tom0872a172014-09-23 11:24:26 -070062 /**
63 * Sets up the common serialzers pool.
64 */
65 protected void setupKryoPool() {
66 // FIXME Slice out types used in common to separate pool/namespace.
67 serializerPool = KryoPool.newBuilder()
68 .register(
69 ArrayList.class,
70 HashMap.class,
71
72 Device.Type.class,
73
74 DefaultDevice.class,
75 MastershipRole.class,
76 Port.class,
77 Element.class
78 )
79 .register(URI.class, new URISerializer())
80 .register(ProviderId.class, new ProviderIdSerializer())
81 .register(DeviceId.class, new DeviceIdSerializer())
82 .register(PortNumber.class, new PortNumberSerializer())
83 .register(DefaultPort.class, new DefaultPortSerializer())
84 .build()
85 .populate(10);
86 }
87
tomdc66b382014-09-22 17:05:47 -070088 @Deactivate
89 public void deactivate() {
tom0872a172014-09-23 11:24:26 -070090 instance.shutdown();
tomdc66b382014-09-22 17:05:47 -070091 log.info("Stopped");
92 }
93
94 @Override
95 public HazelcastInstance getHazelcastInstance() {
96 return instance;
97 }
tom0872a172014-09-23 11:24:26 -070098
99
100 @Override
101 public byte[] serialize(final Object obj) {
102 return serializerPool.serialize(obj);
103 }
104
105 @Override
106 public <T> T deserialize(final byte[] bytes) {
107 if (bytes == null) {
108 return null;
109 }
110 return serializerPool.deserialize(bytes);
111 }
112
tomdc66b382014-09-22 17:05:47 -0700113}