public ShowResultSet modifyBackendProperty(ModifyBackendClause modifyBackendClause) throws DdlException {
        String backendHostPort = modifyBackendClause.getBackendHostPort();
        Map<String, String> properties = modifyBackendClause.getProperties();

        // check backend existence
        Backend backend = getBackendWithHeartbeatPort(backendHostPort.split(":")[0],
                Integer.parseInt(backendHostPort.split(":")[1]));
        if (null == backend) {
            throw new DdlException(String.format("backend [%s] not found", backendHostPort));
        }

        ShowResultSetMetaData.Builder builder = ShowResultSetMetaData.builder();
        builder.addColumn(new Column("Message", ScalarType.createVarchar(1024)));
        List<List<String>> messageResult = new ArrayList<>();

        // update backend based on properties
        for (Map.Entry<String, String> entry : properties.entrySet()) {
            if (entry.getKey().equals(AlterSystemStmtAnalyzer.PROP_KEY_LOCATION)) {
                Map<String, String> location = new HashMap<>();
                // "" means clean backend location label
                if (entry.getValue().isEmpty()) {
                    backend.setLocation(location);
                    continue;
                }
                String[] locKV = entry.getValue().split(":");
                location.put(locKV[0].trim(), locKV[1].trim());
                backend.setLocation(location);
                String opMessage = String.format("%s:%d's location has been modified to %s",
                        backend.getHost(), backend.getHeartbeatPort(), properties);
                messageResult.add(Collections.singletonList(opMessage));
            } else {
                throw new UnsupportedOperationException("unsupported property: " + entry.getKey());
            }
        }

        // persistence
        GlobalStateMgr.getCurrentState().getEditLog().logBackendStateChange(backend);

        // Return message
        return new ShowResultSet(builder.build(), messageResult);
    }
@Test
    public void testModifyBackendProperty() throws DdlException {
        Backend be = new Backend(100, "originalHost", 1000);
        service.addBackend(be);
        Map<String, String> properties = Maps.newHashMap();
        String location = "rack:rack1";
        properties.put(AlterSystemStmtAnalyzer.PROP_KEY_LOCATION, location);
        ModifyBackendClause clause = new ModifyBackendClause("originalHost:1000", properties);
        service.modifyBackendProperty(clause);
        Backend backend = service.getBackendWithHeartbeatPort("originalHost", 1000);
        Assert.assertNotNull(backend);
        Assert.assertEquals("{rack=rack1}", backend.getLocation().toString());
    }