()
| 150 | } |
| 151 | |
| 152 | public void start() throws Exception { |
| 153 | ShutdownHook.add(this, this::stop); |
| 154 | var raftXmlFiles = new ArrayList<File>(); |
| 155 | listRaftXmlFiles(new File(home), raftXmlFiles); |
| 156 | logger.info("loading {} raftXmlFiles from '{}'", raftXmlFiles.size(), home); |
| 157 | raftXmlFiles.parallelStream().forEach((raftXml) -> { |
| 158 | try { |
| 159 | var bytes = java.nio.file.Files.readAllBytes(raftXml.toPath()); |
| 160 | var raftStr = new String(bytes, StandardCharsets.UTF_8); |
| 161 | var raftConfig = RaftConfig.loadFromString(raftStr); |
| 162 | raftConfig.setDbHome(raftXml.getParent()); |
| 163 | dbh2s.computeIfAbsent(raftConfig.getSortedNames(), __ -> { |
| 164 | var dbh2 = new Dbh2(this, raftConfig.getName(), |
| 165 | database, raftConfig, |
| 166 | null, false, taskOneByOne); |
| 167 | proxyServer.addRaft(dbh2.getRaft()); |
| 168 | logger.info("start: add raftName = '{}'", dbh2.getRaft().getName()); |
| 169 | return dbh2; |
| 170 | }); |
| 171 | } catch (IOException ex) { |
| 172 | throw new RuntimeException(ex); |
| 173 | } |
| 174 | }); |
| 175 | masterAgent.startAndWaitConnectionReady(); |
| 176 | var acceptorAddress = masterService.getAcceptorAddress(); |
| 177 | var dbh2sAtMaster = masterAgent.register(acceptorAddress.getKey(), acceptorAddress.getValue(), dbh2s.size()); |
| 178 | logger.info("{}, {} - rafts=\n{}\n{}", acceptorAddress.getKey(), acceptorAddress.getValue(), dbh2sAtMaster, dbh2s.keySet()); |
| 179 | // build map |
| 180 | var dbh2sAtMasterMiss = new HashMap<String, BDbh2Config.Data>(); |
| 181 | for (var dbh2 : dbh2sAtMaster.getDbh2Configs()) { |
| 182 | if (!dbh2s.containsKey(dbh2.getRaftConfig())) |
| 183 | dbh2sAtMasterMiss.put(dbh2.getRaftConfig(), dbh2); |
| 184 | } |
| 185 | // 保存并启动丢失的dbh2(一般是系统完全毁坏,重新找的新机器) ... |
| 186 | logger.info("miss rafts={}", dbh2sAtMasterMiss.values()); |
| 187 | for (var dbh2 : dbh2sAtMasterMiss.values()) { |
| 188 | createBucket(dbh2.getDatabase(), dbh2.getTable(), dbh2.getRaftConfig()); |
| 189 | } |
| 190 | // set ready |
| 191 | masterAgent.setDbh2Ready(); |
| 192 | proxyServer.start(); |
| 193 | |
| 194 | loadMonitorTimer = Task.scheduleUnsafe(120_000, 120_000, this::loadMonitor); |
| 195 | } |
| 196 | |
| 197 | private void loadMonitor() throws Exception { |
| 198 | var loadManager = 0.0; |
no test coverage detected