Improvement to device state service
This commit is contained in:
parent
866d7c4a2c
commit
93a8c90882
@ -30,13 +30,6 @@ public interface ClusterRoutingService extends DiscoveryServiceListener {
|
||||
|
||||
ServerAddress getCurrentServer();
|
||||
|
||||
Optional<ServerAddress> resolveByUuid(UUID uuid);
|
||||
|
||||
Optional<ServerAddress> resolveById(EntityId entityId);
|
||||
|
||||
Optional<ServerAddress> resolveByUuid(ServerType server, UUID uuid);
|
||||
|
||||
Optional<ServerAddress> resolveById(ServerType server, EntityId entityId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -88,21 +88,6 @@ public class ConsistentClusterRoutingService implements ClusterRoutingService {
|
||||
return resolveByUuid(rootCircle, entityId.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ServerAddress> resolveByUuid(UUID uuid) {
|
||||
return resolveByUuid(rootCircle, uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ServerAddress> resolveByUuid(ServerType server, UUID uuid) {
|
||||
return resolveByUuid(circles[server.ordinal()], uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ServerAddress> resolveById(ServerType server, EntityId entityId) {
|
||||
return resolveByUuid(circles[server.ordinal()], entityId.getId());
|
||||
}
|
||||
|
||||
private Optional<ServerAddress> resolveByUuid(ConsistentHashCircle circle, UUID uuid) {
|
||||
Assert.notNull(uuid);
|
||||
if (circle.isEmpty()) {
|
||||
|
||||
@ -296,15 +296,21 @@ public class DefaultDeviceStateService implements DeviceStateService {
|
||||
private void updateState() {
|
||||
long ts = System.currentTimeMillis();
|
||||
Set<DeviceId> deviceIds = new HashSet<>(deviceStates.keySet());
|
||||
log.info("Calculating state updates for {} devices", deviceStates.size());
|
||||
for (DeviceId deviceId : deviceIds) {
|
||||
DeviceStateData stateData = deviceStates.get(deviceId);
|
||||
DeviceState state = stateData.getState();
|
||||
state.setActive(ts < state.getLastActivityTime() + state.getInactivityTimeout());
|
||||
if (!state.isActive() && (state.getLastInactivityAlarmTime() == 0L || state.getLastInactivityAlarmTime() < state.getLastActivityTime())) {
|
||||
state.setLastInactivityAlarmTime(ts);
|
||||
pushRuleEngineMessage(stateData, INACTIVITY_EVENT);
|
||||
save(deviceId, INACTIVITY_ALARM_TIME, ts);
|
||||
save(deviceId, ACTIVITY_STATE, state.isActive());
|
||||
DeviceStateData stateData = getOrFetchDeviceStateData(deviceId);
|
||||
if (stateData != null) {
|
||||
DeviceState state = stateData.getState();
|
||||
state.setActive(ts < state.getLastActivityTime() + state.getInactivityTimeout());
|
||||
if (!state.isActive() && (state.getLastInactivityAlarmTime() == 0L || state.getLastInactivityAlarmTime() < state.getLastActivityTime())) {
|
||||
state.setLastInactivityAlarmTime(ts);
|
||||
pushRuleEngineMessage(stateData, INACTIVITY_EVENT);
|
||||
save(deviceId, INACTIVITY_ALARM_TIME, ts);
|
||||
save(deviceId, ACTIVITY_STATE, state.isActive());
|
||||
}
|
||||
} else {
|
||||
log.debug("[{}] Device that belongs to other server is detected and removed.", deviceId);
|
||||
deviceStates.remove(deviceId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -353,6 +359,7 @@ public class DefaultDeviceStateService implements DeviceStateService {
|
||||
if (device != null) {
|
||||
try {
|
||||
deviceStateData = fetchDeviceState(device).get();
|
||||
deviceStates.putIfAbsent(deviceId, deviceStateData);
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
log.debug("[{}] Failed to fetch device state!", deviceId, e);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user