Search in sources :

Example 26 with Datum

use of com.alibaba.nacos.naming.consistency.Datum in project nacos by alibaba.

the class RaftStore method loadDatums.

/**
 * Load datum from cache file.
 *
 * @param notifier raft notifier
 * @param datums   cached datum map
 * @throws Exception any exception during load
 */
public synchronized void loadDatums(PersistentNotifier notifier, Map<String, Datum> datums) throws Exception {
    Datum datum;
    long start = System.currentTimeMillis();
    for (File cache : listCaches()) {
        if (cache.isDirectory() && cache.listFiles() != null) {
            for (File datumFile : cache.listFiles()) {
                datum = readDatum(datumFile, cache.getName());
                if (datum != null) {
                    datums.put(datum.key, datum);
                    if (notifier != null) {
                        NotifyCenter.publishEvent(ValueChangeEvent.builder().key(datum.key).action(DataOperation.CHANGE).build());
                    }
                }
            }
            continue;
        }
        datum = readDatum(cache, StringUtils.EMPTY);
        if (datum != null) {
            datums.put(datum.key, datum);
        }
    }
    Loggers.RAFT.info("finish loading all datums, size: {} cost {} ms.", datums.size(), (System.currentTimeMillis() - start));
}
Also used : Datum(com.alibaba.nacos.naming.consistency.Datum) File(java.io.File)

Example 27 with Datum

use of com.alibaba.nacos.naming.consistency.Datum in project nacos by alibaba.

the class DistroController method onSyncDatum.

/**
 * Synchronize datum.
 *
 * @param dataMap data map
 * @return 'ok' if success
 * @throws Exception if failed
 */
@PutMapping("/datum")
public ResponseEntity onSyncDatum(@RequestBody Map<String, Datum<Instances>> dataMap) throws Exception {
    if (dataMap.isEmpty()) {
        Loggers.DISTRO.error("[onSync] receive empty entity!");
        throw new NacosException(NacosException.INVALID_PARAM, "receive empty entity!");
    }
    for (Map.Entry<String, Datum<Instances>> entry : dataMap.entrySet()) {
        if (KeyBuilder.matchEphemeralInstanceListKey(entry.getKey())) {
            String namespaceId = KeyBuilder.getNamespace(entry.getKey());
            String serviceName = KeyBuilder.getServiceName(entry.getKey());
            if (!serviceManager.containService(namespaceId, serviceName) && switchDomain.isDefaultInstanceEphemeral()) {
                serviceManager.createEmptyService(namespaceId, serviceName, true);
            }
            DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(entry.getKey()), entry.getValue());
            distroProtocol.onReceive(distroHttpData);
        }
    }
    return ResponseEntity.ok("ok");
}
Also used : Datum(com.alibaba.nacos.naming.consistency.Datum) Map(java.util.Map) NacosException(com.alibaba.nacos.api.exception.NacosException) DistroHttpData(com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroHttpData) PutMapping(org.springframework.web.bind.annotation.PutMapping)

Example 28 with Datum

use of com.alibaba.nacos.naming.consistency.Datum in project nacos by alibaba.

the class RaftController method onDelete.

/**
 * Commit delete datum.
 *
 * @param request  http request
 * @param response http response
 * @return 'ok' if success
 * @throws Exception exception
 */
@DeleteMapping("/datum/commit")
public String onDelete(HttpServletRequest request, HttpServletResponse response) throws Exception {
    if (versionJudgement.allMemberIsNewVersion()) {
        throw new IllegalStateException("old raft protocol already stop");
    }
    response.setHeader("Content-Type", "application/json; charset=" + getAcceptEncoding(request));
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Content-Encode", "gzip");
    String entity = IoUtils.toString(request.getInputStream(), "UTF-8");
    String value = URLDecoder.decode(entity, "UTF-8");
    value = URLDecoder.decode(value, "UTF-8");
    JsonNode jsonObject = JacksonUtils.toObj(value);
    Datum datum = JacksonUtils.toObj(jsonObject.get("datum").toString(), Datum.class);
    RaftPeer source = JacksonUtils.toObj(jsonObject.get("source").toString(), RaftPeer.class);
    raftConsistencyService.onRemove(datum, source);
    return "ok";
}
Also used : Datum(com.alibaba.nacos.naming.consistency.Datum) JsonNode(com.fasterxml.jackson.databind.JsonNode) RaftPeer(com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer) DeleteMapping(org.springframework.web.bind.annotation.DeleteMapping)

Example 29 with Datum

use of com.alibaba.nacos.naming.consistency.Datum in project nacos by alibaba.

the class RaftStoreTest method wrietDatum.

@Test
public void wrietDatum() throws Exception {
    Datum<Instances> datum = new Datum<>();
    String key = KeyBuilder.buildInstanceListKey(TEST_NAMESPACE, TEST_SERVICE_NAME, false);
    datum.key = key;
    datum.timestamp.getAndIncrement();
    datum.value = new Instances();
    Instance instance = new Instance("1.1.1.1", 1, TEST_CLUSTER_NAME);
    datum.value.getInstanceList().add(instance);
    instance = new Instance("2.2.2.2", 2, TEST_CLUSTER_NAME);
    datum.value.getInstanceList().add(instance);
    raftStore.write(datum);
    raftCore.init();
    Datum result = raftCore.getDatum(key);
    Assert.assertEquals(key, result.key);
    Assert.assertEquals(1, result.timestamp.intValue());
    Assert.assertEquals(datum.value.toString(), result.value.toString());
}
Also used : Instances(com.alibaba.nacos.naming.core.Instances) Datum(com.alibaba.nacos.naming.consistency.Datum) Instance(com.alibaba.nacos.naming.core.Instance) Test(org.junit.Test) BaseTest(com.alibaba.nacos.naming.BaseTest)

Aggregations

Datum (com.alibaba.nacos.naming.consistency.Datum)29 NacosException (com.alibaba.nacos.api.exception.NacosException)10 HashMap (java.util.HashMap)10 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)6 Test (org.junit.Test)6 Instances (com.alibaba.nacos.naming.core.Instances)5 Instance (com.alibaba.nacos.naming.core.Instance)4 JsonNode (com.fasterxml.jackson.databind.JsonNode)4 IOException (java.io.IOException)4 UnsupportedEncodingException (java.io.UnsupportedEncodingException)4 ArrayList (java.util.ArrayList)4 NacosRuntimeException (com.alibaba.nacos.api.exception.runtime.NacosRuntimeException)3 DistroData (com.alibaba.nacos.core.distributed.distro.entity.DistroData)3 BaseTest (com.alibaba.nacos.naming.BaseTest)3 Service (com.alibaba.nacos.naming.core.Service)3 TypeReference (com.fasterxml.jackson.core.type.TypeReference)3 Map (java.util.Map)3 WriteRequest (com.alibaba.nacos.consistency.entity.WriteRequest)2 DistroKey (com.alibaba.nacos.core.distributed.distro.entity.DistroKey)2 Serializer (com.alibaba.nacos.naming.cluster.transport.Serializer)2