public UriHostMapping(String hostMappingString) {
        if (hostMappingString == null || hostMappingString.isEmpty()) {
            hostMapping = null;
            return;
        }
        try {
            this.hostMapping =
                    Arrays.stream(hostMappingString.split(";"))
                            .map(
                                    s -> {
                                        String[] hostAndPort = s.split(":");
                                        return new ConcurrentHashMap.SimpleEntry<>(
                                                hostAndPort[0], hostAndPort[1]);
                                    })
                            .collect(
                                    Collectors.toConcurrentMap(
                                            ConcurrentHashMap.SimpleEntry::getKey,
                                            ConcurrentHashMap.SimpleEntry::getValue));
        } catch (Exception e) {
            LOG.error("Invalid host mapping string: {}", hostMappingString, e);
            throw new IllegalArgumentException("Invalid host mapping string: " + hostMappingString);
        }
    }
@Test
    public void uriHostMappingTest() {
        final TiConfiguration tiConf =
                TDBSourceOptions.getTiConfiguration(
                        "http://0.0.0.0:2347", "host1:1;host2:2;host3:3", new HashMap<>());
        UriHostMapping uriHostMapping = (UriHostMapping) tiConf.getHostMapping();
        assertEquals(uriHostMapping.getHostMapping().size(), 3);
        assertEquals(uriHostMapping.getHostMapping().get("host1"), "1");
    }