blob: a99482f5c4df122c993ff2a841c2a7e854caf20c [file] [log] [blame]
Madan Jampani61056bc2014-09-27 09:07:26 -07001package org.onlab.onos.store.device.impl;
2
3import static org.slf4j.LoggerFactory.getLogger;
4
5import java.util.concurrent.ConcurrentHashMap;
6import java.util.concurrent.ConcurrentMap;
7import java.util.concurrent.atomic.AtomicInteger;
8
9import org.apache.felix.scr.annotations.Activate;
10import org.apache.felix.scr.annotations.Component;
11import org.apache.felix.scr.annotations.Deactivate;
12import org.apache.felix.scr.annotations.Service;
13import org.onlab.onos.cluster.MastershipTerm;
14import org.onlab.onos.net.DeviceId;
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070015import org.onlab.onos.store.ClockService;
Madan Jampani61056bc2014-09-27 09:07:26 -070016import org.onlab.onos.store.Timestamp;
Madan Jampani61056bc2014-09-27 09:07:26 -070017import org.onlab.onos.store.impl.OnosTimestamp;
18import org.slf4j.Logger;
19
20@Component(immediate = true)
21@Service
22public class OnosClockService implements ClockService {
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070023
Madan Jampani61056bc2014-09-27 09:07:26 -070024 private final Logger log = getLogger(getClass());
25
26 // TODO: Implement per device ticker that is reset to 0 at the beginning of a new term.
27 private final AtomicInteger ticker = new AtomicInteger(0);
28 private ConcurrentMap<DeviceId, MastershipTerm> deviceMastershipTerms = new ConcurrentHashMap<>();
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070029
Madan Jampani61056bc2014-09-27 09:07:26 -070030 @Activate
31 public void activate() {
32 log.info("Started");
33 }
34
35 @Deactivate
36 public void deactivate() {
37 log.info("Stopped");
38 }
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070039
Madan Jampani61056bc2014-09-27 09:07:26 -070040 @Override
41 public Timestamp getTimestamp(DeviceId deviceId) {
42 MastershipTerm term = deviceMastershipTerms.get(deviceId);
43 if (term == null) {
44 throw new IllegalStateException("Requesting timestamp for a deviceId without mastership");
45 }
46 return new OnosTimestamp(term.termNumber(), ticker.incrementAndGet());
47 }
48
49 @Override
50 public void setMastershipTerm(DeviceId deviceId, MastershipTerm term) {
51 deviceMastershipTerms.put(deviceId, term);
52 }
53}