|
|
@ -25,6 +25,7 @@ import lombok.Data; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.checkerframework.checker.nullness.qual.Nullable; |
|
|
import org.checkerframework.checker.nullness.qual.Nullable; |
|
|
import org.springframework.data.util.Pair; |
|
|
import org.springframework.data.util.Pair; |
|
|
|
|
|
import org.thingsboard.rule.engine.api.AttributesSaveRequest; |
|
|
import org.thingsboard.server.common.data.AttributeScope; |
|
|
import org.thingsboard.server.common.data.AttributeScope; |
|
|
import org.thingsboard.server.common.data.DataConstants; |
|
|
import org.thingsboard.server.common.data.DataConstants; |
|
|
import org.thingsboard.server.common.data.EdgeUtils; |
|
|
import org.thingsboard.server.common.data.EdgeUtils; |
|
|
@ -37,6 +38,7 @@ import org.thingsboard.server.common.data.id.TenantId; |
|
|
import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
|
|
import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
|
|
import org.thingsboard.server.common.data.kv.AttributesSaveResult; |
|
|
import org.thingsboard.server.common.data.kv.AttributesSaveResult; |
|
|
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; |
|
|
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; |
|
|
|
|
|
import org.thingsboard.server.common.data.kv.BooleanDataEntry; |
|
|
import org.thingsboard.server.common.data.kv.LongDataEntry; |
|
|
import org.thingsboard.server.common.data.kv.LongDataEntry; |
|
|
import org.thingsboard.server.common.data.kv.StringDataEntry; |
|
|
import org.thingsboard.server.common.data.kv.StringDataEntry; |
|
|
import org.thingsboard.server.common.data.limit.LimitedApi; |
|
|
import org.thingsboard.server.common.data.limit.LimitedApi; |
|
|
@ -195,7 +197,7 @@ public abstract class EdgeGrpcSession implements Closeable { |
|
|
} |
|
|
} |
|
|
startSyncProcess(fullSync); |
|
|
startSyncProcess(fullSync); |
|
|
} else { |
|
|
} else { |
|
|
syncInProgress = false; |
|
|
updateSyncInProgress(false); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
if (requestMsg.getMsgType().equals(RequestMsgType.UPLINK_RPC_MESSAGE)) { |
|
|
if (requestMsg.getMsgType().equals(RequestMsgType.UPLINK_RPC_MESSAGE)) { |
|
|
@ -241,6 +243,11 @@ public abstract class EdgeGrpcSession implements Closeable { |
|
|
log.debug("[{}] onConfigurationUpdate [{}]", sessionId, edge); |
|
|
log.debug("[{}] onConfigurationUpdate [{}]", sessionId, edge); |
|
|
this.tenantId = edge.getTenantId(); |
|
|
this.tenantId = edge.getTenantId(); |
|
|
this.edge = edge; |
|
|
this.edge = edge; |
|
|
|
|
|
if (!this.edge.getCustomerId().equals(edge.getCustomerId())) { |
|
|
|
|
|
// do not send edge configuration message on customer update
|
|
|
|
|
|
// message send by separate flow from assign_to or unassing_from customer
|
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
EdgeUpdateMsg edgeConfig = EdgeUpdateMsg.newBuilder() |
|
|
EdgeUpdateMsg edgeConfig = EdgeUpdateMsg.newBuilder() |
|
|
.setConfiguration(EdgeMsgConstructorUtils.constructEdgeConfiguration(edge)).build(); |
|
|
.setConfiguration(EdgeMsgConstructorUtils.constructEdgeConfiguration(edge)).build(); |
|
|
ResponseMsg edgeConfigMsg = ResponseMsg.newBuilder() |
|
|
ResponseMsg edgeConfigMsg = ResponseMsg.newBuilder() |
|
|
@ -252,7 +259,7 @@ public abstract class EdgeGrpcSession implements Closeable { |
|
|
public void startSyncProcess(boolean fullSync) { |
|
|
public void startSyncProcess(boolean fullSync) { |
|
|
if (!syncInProgress) { |
|
|
if (!syncInProgress) { |
|
|
log.info("[{}][{}][{}] Staring edge sync process", tenantId, edge.getId(), sessionId); |
|
|
log.info("[{}][{}][{}] Staring edge sync process", tenantId, edge.getId(), sessionId); |
|
|
syncInProgress = true; |
|
|
updateSyncInProgress(true); |
|
|
interruptGeneralProcessingOnSync(); |
|
|
interruptGeneralProcessingOnSync(); |
|
|
doSync(new EdgeSyncCursor(ctx, edge, fullSync)); |
|
|
doSync(new EdgeSyncCursor(ctx, edge, fullSync)); |
|
|
} else { |
|
|
} else { |
|
|
@ -398,6 +405,18 @@ public abstract class EdgeGrpcSession implements Closeable { |
|
|
ctx.getAttributesService().save(tenantId, edge.getId(), AttributeScope.SERVER_SCOPE, attributeKvEntry); |
|
|
ctx.getAttributesService().save(tenantId, edge.getId(), AttributeScope.SERVER_SCOPE, attributeKvEntry); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void updateSyncInProgress(Boolean value) { |
|
|
|
|
|
this.syncInProgress = value; |
|
|
|
|
|
|
|
|
|
|
|
ctx.getTsSubService().saveAttributes(AttributesSaveRequest.builder() |
|
|
|
|
|
.tenantId(tenantId) |
|
|
|
|
|
.entityId(edge.getId()) |
|
|
|
|
|
.scope(AttributeScope.SERVER_SCOPE) |
|
|
|
|
|
.entry(new BooleanDataEntry(DataConstants.EDGE_SYNC_IN_PROGRESS_ATTR_KEY, value)) |
|
|
|
|
|
.callback(new AttributeSaveCallback(tenantId, edge.getId(), DataConstants.EDGE_SYNC_IN_PROGRESS_ATTR_KEY, value)) |
|
|
|
|
|
.build()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private void interruptGeneralProcessingOnSync() { |
|
|
private void interruptGeneralProcessingOnSync() { |
|
|
log.debug("[{}][{}][{}] Sync process started. General processing interrupted!", tenantId, edge.getId(), sessionId); |
|
|
log.debug("[{}][{}][{}] Sync process started. General processing interrupted!", tenantId, edge.getId(), sessionId); |
|
|
stopCurrentSendDownlinkMsgsTask(true); |
|
|
stopCurrentSendDownlinkMsgsTask(true); |
|
|
@ -766,7 +785,7 @@ public abstract class EdgeGrpcSession implements Closeable { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void markSyncCompletedSendEdgeEventUpdate() { |
|
|
private void markSyncCompletedSendEdgeEventUpdate() { |
|
|
syncInProgress = false; |
|
|
updateSyncInProgress(false); |
|
|
ctx.getClusterService().onEdgeEventUpdate(new EdgeEventUpdateMsg(edge.getTenantId(), edge.getId())); |
|
|
ctx.getClusterService().onEdgeEventUpdate(new EdgeEventUpdateMsg(edge.getTenantId(), edge.getId())); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|