Commit b5bedbfdf6e99ee133bad22011af4299a8d38854

Authored by Andrii Shvaika
1 parent a91a69c5

Refactoring of Docker Compose

@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 "additionalInfo": null, 3 "additionalInfo": null,
4 "name": "Root Rule Chain", 4 "name": "Root Rule Chain",
5 "firstRuleNodeId": null, 5 "firstRuleNodeId": null,
6 - "root": false, 6 + "root": true,
7 "debugMode": false, 7 "debugMode": false,
8 "configuration": null 8 "configuration": null
9 }, 9 },
@@ -161,15 +161,15 @@ public class RuleChainController extends BaseController { @@ -161,15 +161,15 @@ public class RuleChainController extends BaseController {
161 TenantId tenantId = getCurrentUser().getTenantId(); 161 TenantId tenantId = getCurrentUser().getTenantId();
162 RuleChain previousRootRuleChain = ruleChainService.getRootTenantRuleChain(tenantId); 162 RuleChain previousRootRuleChain = ruleChainService.getRootTenantRuleChain(tenantId);
163 if (ruleChainService.setRootRuleChain(getTenantId(), ruleChainId)) { 163 if (ruleChainService.setRootRuleChain(getTenantId(), ruleChainId)) {
  164 + if (previousRootRuleChain != null) {
  165 + previousRootRuleChain = ruleChainService.findRuleChainById(getTenantId(), previousRootRuleChain.getId());
164 166
165 - previousRootRuleChain = ruleChainService.findRuleChainById(getTenantId(), previousRootRuleChain.getId());  
166 -  
167 - tbClusterService.onEntityStateChange(previousRootRuleChain.getTenantId(), previousRootRuleChain.getId(),  
168 - ComponentLifecycleEvent.UPDATED);  
169 -  
170 - logEntityAction(previousRootRuleChain.getId(), previousRootRuleChain,  
171 - null, ActionType.UPDATED, null); 167 + tbClusterService.onEntityStateChange(previousRootRuleChain.getTenantId(), previousRootRuleChain.getId(),
  168 + ComponentLifecycleEvent.UPDATED);
172 169
  170 + logEntityAction(previousRootRuleChain.getId(), previousRootRuleChain,
  171 + null, ActionType.UPDATED, null);
  172 + }
173 ruleChain = ruleChainService.findRuleChainById(getTenantId(), ruleChainId); 173 ruleChain = ruleChainService.findRuleChainById(getTenantId(), ruleChainId);
174 174
175 tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), 175 tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(),
@@ -88,26 +88,33 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -88,26 +88,33 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
88 RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId()); 88 RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId());
89 if (!ruleChain.isRoot()) { 89 if (!ruleChain.isRoot()) {
90 RuleChain previousRootRuleChain = getRootTenantRuleChain(ruleChain.getTenantId()); 90 RuleChain previousRootRuleChain = getRootTenantRuleChain(ruleChain.getTenantId());
91 - if (!previousRootRuleChain.getId().equals(ruleChain.getId())) {  
92 - try { 91 + try {
  92 + if (previousRootRuleChain == null) {
  93 + setRootAndSave(tenantId, ruleChain);
  94 + return true;
  95 + } else if (!previousRootRuleChain.getId().equals(ruleChain.getId())) {
93 deleteRelation(tenantId, new EntityRelation(previousRootRuleChain.getTenantId(), previousRootRuleChain.getId(), 96 deleteRelation(tenantId, new EntityRelation(previousRootRuleChain.getTenantId(), previousRootRuleChain.getId(),
94 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); 97 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
95 previousRootRuleChain.setRoot(false); 98 previousRootRuleChain.setRoot(false);
96 ruleChainDao.save(tenantId, previousRootRuleChain); 99 ruleChainDao.save(tenantId, previousRootRuleChain);
97 - createRelation(tenantId, new EntityRelation(ruleChain.getTenantId(), ruleChain.getId(),  
98 - EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));  
99 - ruleChain.setRoot(true);  
100 - ruleChainDao.save(tenantId, ruleChain); 100 + setRootAndSave(tenantId, ruleChain);
101 return true; 101 return true;
102 - } catch (ExecutionException | InterruptedException e) {  
103 - log.warn("[{}] Failed to set root rule chain, ruleChainId: [{}]", ruleChainId);  
104 - throw new RuntimeException(e);  
105 } 102 }
  103 + } catch (ExecutionException | InterruptedException e) {
  104 + log.warn("[{}] Failed to set root rule chain, ruleChainId: [{}]", ruleChainId);
  105 + throw new RuntimeException(e);
106 } 106 }
107 } 107 }
108 return false; 108 return false;
109 } 109 }
110 110
  111 + private void setRootAndSave(TenantId tenantId, RuleChain ruleChain) throws ExecutionException, InterruptedException {
  112 + createRelation(tenantId, new EntityRelation(ruleChain.getTenantId(), ruleChain.getId(),
  113 + EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
  114 + ruleChain.setRoot(true);
  115 + ruleChainDao.save(tenantId, ruleChain);
  116 + }
  117 +
111 @Override 118 @Override
112 public RuleChainMetaData saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData) { 119 public RuleChainMetaData saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData) {
113 Validator.validateId(ruleChainMetaData.getRuleChainId(), "Incorrect rule chain id."); 120 Validator.validateId(ruleChainMetaData.getRuleChainId(), "Incorrect rule chain id.");
@@ -58,7 +58,7 @@ In case of any issues you can examine service logs for errors. @@ -58,7 +58,7 @@ In case of any issues you can examine service logs for errors.
58 For example to see ThingsBoard node logs execute the following command: 58 For example to see ThingsBoard node logs execute the following command:
59 59
60 ` 60 `
61 -$ docker-compose logs -f tb1 61 +$ docker-compose logs -f tb-core1 tb-rule-engine1
62 ` 62 `
63 63
64 Or use `docker-compose ps` to see the state of all the containers. 64 Or use `docker-compose ps` to see the state of all the containers.
@@ -24,14 +24,28 @@ services: @@ -24,14 +24,28 @@ services:
24 - "9042" 24 - "9042"
25 volumes: 25 volumes:
26 - ./tb-node/cassandra:/var/lib/cassandra 26 - ./tb-node/cassandra:/var/lib/cassandra
27 - tb1: 27 + tb-core1:
28 env_file: 28 env_file:
29 - tb-node.cassandra.env 29 - tb-node.cassandra.env
30 depends_on: 30 depends_on:
31 - kafka 31 - kafka
32 - redis 32 - redis
33 - cassandra 33 - cassandra
34 - tb2: 34 + tb-core2:
  35 + env_file:
  36 + - tb-node.cassandra.env
  37 + depends_on:
  38 + - kafka
  39 + - redis
  40 + - cassandra
  41 + tb-rule-engine1:
  42 + env_file:
  43 + - tb-node.cassandra.env
  44 + depends_on:
  45 + - kafka
  46 + - redis
  47 + - cassandra
  48 + tb-rule-engine2:
35 env_file: 49 env_file:
36 - tb-node.cassandra.env 50 - tb-node.cassandra.env
37 depends_on: 51 depends_on:
@@ -20,10 +20,16 @@ services: @@ -20,10 +20,16 @@ services:
20 postgres: 20 postgres:
21 volumes: 21 volumes:
22 - postgres-db-volume:/var/lib/postgresql/data 22 - postgres-db-volume:/var/lib/postgresql/data
23 - tb1: 23 + tb-core1:
24 volumes: 24 volumes:
25 - tb-log-volume:/var/log/thingsboard 25 - tb-log-volume:/var/log/thingsboard
26 - tb2: 26 + tb-core2:
  27 + volumes:
  28 + - tb-log-volume:/var/log/thingsboard
  29 + tb-rule-engine1:
  30 + volumes:
  31 + - tb-log-volume:/var/log/thingsboard
  32 + tb-rule-engine2:
27 volumes: 33 volumes:
28 - tb-log-volume:/var/log/thingsboard 34 - tb-log-volume:/var/log/thingsboard
29 tb-coap-transport: 35 tb-coap-transport:
@@ -27,14 +27,28 @@ services: @@ -27,14 +27,28 @@ services:
27 POSTGRES_PASSWORD: postgres 27 POSTGRES_PASSWORD: postgres
28 volumes: 28 volumes:
29 - ./tb-node/postgres:/var/lib/postgresql/data 29 - ./tb-node/postgres:/var/lib/postgresql/data
30 - tb1: 30 + tb-core1:
31 env_file: 31 env_file:
32 - tb-node.postgres.env 32 - tb-node.postgres.env
33 depends_on: 33 depends_on:
34 - kafka 34 - kafka
35 - redis 35 - redis
36 - postgres 36 - postgres
37 - tb2: 37 + tb-core2:
  38 + env_file:
  39 + - tb-node.postgres.env
  40 + depends_on:
  41 + - kafka
  42 + - redis
  43 + - postgres
  44 + tb-rule-engine1:
  45 + env_file:
  46 + - tb-node.postgres.env
  47 + depends_on:
  48 + - kafka
  49 + - redis
  50 + - postgres
  51 + tb-rule-engine2:
38 env_file: 52 env_file:
39 - tb-node.postgres.env 53 - tb-node.postgres.env
40 depends_on: 54 depends_on:
@@ -48,7 +48,7 @@ services: @@ -48,7 +48,7 @@ services:
48 - tb-js-executor.env 48 - tb-js-executor.env
49 depends_on: 49 depends_on:
50 - kafka 50 - kafka
51 - tb1: 51 + tb-core1:
52 restart: always 52 restart: always
53 image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}" 53 image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
54 ports: 54 ports:
@@ -59,7 +59,8 @@ services: @@ -59,7 +59,8 @@ services:
59 max-size: "200m" 59 max-size: "200m"
60 max-file: "30" 60 max-file: "30"
61 environment: 61 environment:
62 - TB_SERVICE_ID: tb1 62 + TB_SERVICE_ID: tb-core1
  63 + TB_SERVICE_TYPE: tb-core
63 env_file: 64 env_file:
64 - tb-node.env 65 - tb-node.env
65 volumes: 66 volumes:
@@ -69,7 +70,7 @@ services: @@ -69,7 +70,7 @@ services:
69 - kafka 70 - kafka
70 - redis 71 - redis
71 - tb-js-executor 72 - tb-js-executor
72 - tb2: 73 + tb-core2:
73 restart: always 74 restart: always
74 image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}" 75 image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
75 ports: 76 ports:
@@ -80,7 +81,52 @@ services: @@ -80,7 +81,52 @@ services:
80 max-size: "200m" 81 max-size: "200m"
81 max-file: "30" 82 max-file: "30"
82 environment: 83 environment:
83 - TB_SERVICE_ID: tb2 84 + TB_SERVICE_ID: tb-core2
  85 + TB_SERVICE_TYPE: tb-core
  86 + env_file:
  87 + - tb-node.env
  88 + volumes:
  89 + - ./tb-node/conf:/config
  90 + - ./tb-node/log:/var/log/thingsboard
  91 + depends_on:
  92 + - kafka
  93 + - redis
  94 + - tb-js-executor
  95 + tb-rule-engine1:
  96 + restart: always
  97 + image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
  98 + ports:
  99 + - "8080"
  100 + logging:
  101 + driver: "json-file"
  102 + options:
  103 + max-size: "200m"
  104 + max-file: "30"
  105 + environment:
  106 + TB_SERVICE_ID: tb-rule-engine1
  107 + TB_SERVICE_TYPE: tb-rule-engine
  108 + env_file:
  109 + - tb-node.env
  110 + volumes:
  111 + - ./tb-node/conf:/config
  112 + - ./tb-node/log:/var/log/thingsboard
  113 + depends_on:
  114 + - kafka
  115 + - redis
  116 + - tb-js-executor
  117 + tb-rule-engine2:
  118 + restart: always
  119 + image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
  120 + ports:
  121 + - "8080"
  122 + logging:
  123 + driver: "json-file"
  124 + options:
  125 + max-size: "200m"
  126 + max-file: "30"
  127 + environment:
  128 + TB_SERVICE_ID: tb-rule-engine2
  129 + TB_SERVICE_TYPE: tb-rule-engine
84 env_file: 130 env_file:
85 - tb-node.env 131 - tb-node.env
86 volumes: 132 volumes:
@@ -195,8 +241,8 @@ services: @@ -195,8 +241,8 @@ services:
195 MQTT_PORT: 1883 241 MQTT_PORT: 1883
196 FORCE_HTTPS_REDIRECT: "false" 242 FORCE_HTTPS_REDIRECT: "false"
197 links: 243 links:
198 - - tb1  
199 - - tb2 244 + - tb-core1
  245 + - tb-core2
200 - tb-web-ui1 246 - tb-web-ui1
201 - tb-web-ui2 247 - tb-web-ui2
202 - tb-mqtt-transport1 248 - tb-mqtt-transport1
@@ -49,6 +49,6 @@ if [ ! -z "${ADDITIONAL_STARTUP_SERVICES// }" ]; then @@ -49,6 +49,6 @@ if [ ! -z "${ADDITIONAL_STARTUP_SERVICES// }" ]; then
49 docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS up -d redis $ADDITIONAL_STARTUP_SERVICES 49 docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS up -d redis $ADDITIONAL_STARTUP_SERVICES
50 fi 50 fi
51 51
52 -docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=${loadDemo} tb1 52 +docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=${loadDemo} tb-core1
53 53
54 54
@@ -44,8 +44,8 @@ ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $? @@ -44,8 +44,8 @@ ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?
44 44
45 ADDITIONAL_STARTUP_SERVICES=$(additionalStartupServices) || exit $? 45 ADDITIONAL_STARTUP_SERVICES=$(additionalStartupServices) || exit $?
46 46
47 -docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS pull tb1 47 +docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS pull tb-core1
48 48
49 docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS up -d redis $ADDITIONAL_STARTUP_SERVICES 49 docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS up -d redis $ADDITIONAL_STARTUP_SERVICES
50 50
51 -docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS run --no-deps --rm -e UPGRADE_TB=true -e FROM_VERSION=${fromVersion} tb1 51 +docker-compose -f docker-compose.yml $ADDITIONAL_COMPOSE_ARGS run --no-deps --rm -e UPGRADE_TB=true -e FROM_VERSION=${fromVersion} tb-core1
@@ -111,6 +111,6 @@ backend tb-api-backend @@ -111,6 +111,6 @@ backend tb-api-backend
111 balance leastconn 111 balance leastconn
112 option tcp-check 112 option tcp-check
113 option log-health-checks 113 option log-health-checks
114 - server tbApi1 tb1:8080 check inter 5s resolvers docker_resolver resolve-prefer ipv4  
115 - server tbApi2 tb2:8080 check inter 5s resolvers docker_resolver resolve-prefer ipv4 114 + server tbApi1 tb-core1:8080 check inter 5s resolvers docker_resolver resolve-prefer ipv4
  115 + server tbApi2 tb-core2:8080 check inter 5s resolvers docker_resolver resolve-prefer ipv4
116 http-request set-header X-Forwarded-Port %[dst_port] 116 http-request set-header X-Forwarded-Port %[dst_port]
1 1
2 -REMOTE_JS_EVAL_REQUEST_TOPIC=js.eval.requests 2 +REMOTE_JS_EVAL_REQUEST_TOPIC=js_eval.requests
3 TB_KAFKA_SERVERS=kafka:9092 3 TB_KAFKA_SERVERS=kafka:9092
4 LOGGER_LEVEL=info 4 LOGGER_LEVEL=info
5 LOG_FOLDER=logs 5 LOG_FOLDER=logs
@@ -4,7 +4,7 @@ ZOOKEEPER_ENABLED=true @@ -4,7 +4,7 @@ ZOOKEEPER_ENABLED=true
4 ZOOKEEPER_URL=zookeeper:2181 4 ZOOKEEPER_URL=zookeeper:2181
5 TB_QUEUE_TYPE=kafka 5 TB_QUEUE_TYPE=kafka
6 TB_KAFKA_SERVERS=kafka:9092 6 TB_KAFKA_SERVERS=kafka:9092
7 -JS_EVALUATOR=local 7 +JS_EVALUATOR=remote
8 TRANSPORT_TYPE=remote 8 TRANSPORT_TYPE=remote
9 CACHE_TYPE=redis 9 CACHE_TYPE=redis
10 REDIS_HOST=redis 10 REDIS_HOST=redis
@@ -92,7 +92,7 @@ public class ThingsBoardDbInstaller extends ExternalResource { @@ -92,7 +92,7 @@ public class ThingsBoardDbInstaller extends ExternalResource {
92 dockerCompose.withCommand("up -d redis postgres"); 92 dockerCompose.withCommand("up -d redis postgres");
93 dockerCompose.invokeCompose(); 93 dockerCompose.invokeCompose();
94 94
95 - dockerCompose.withCommand("run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=true tb1"); 95 + dockerCompose.withCommand("run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=true tb-core1");
96 dockerCompose.invokeCompose(); 96 dockerCompose.invokeCompose();
97 97
98 } finally { 98 } finally {