blob: 11a0f3cb935c87fc36c2b169f88c3a3f8828f4cd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package com.yahoo.vespa.config.server.session;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.slime.SlimeUtils;
import com.yahoo.vespa.config.server.session.ActivationTriggers.NodeRestart;
import com.yahoo.vespa.config.server.session.ActivationTriggers.Reindexing;
import java.util.List;
import static com.yahoo.yolean.Exceptions.uncheck;
/**
* @author jonmv
*/
public class ActivationTriggersSerializer {
static final String NODE_RESTARTS = "nodeRestarts";
static final String RESTARTING_CLUSTERS = "restartingClusters";
static final String REINDEXINGS = "reindexings";
static final String CLUSTER_NAME = "clusterName";
static final String DOCUMENT_TYPE = "documentType";
public static byte[] toJson(ActivationTriggers triggers) {
Slime root = new Slime();
toSlime(triggers, root.setObject());
return uncheck(() -> SlimeUtils.toJsonBytes(root));
}
public static ActivationTriggers fromJson(byte[] json) {
return fromSlime(SlimeUtils.jsonToSlime(json).get());
}
public static void toSlime(ActivationTriggers triggers, Cursor object) {
Cursor nodeRestarts = object.setArray(NODE_RESTARTS);
for (NodeRestart nodeRestart : triggers.nodeRestarts())
nodeRestarts.addString(nodeRestart.hostname());
Cursor restartingClusters = object.setArray(RESTARTING_CLUSTERS);
for (ClusterSpec.Id clusterId : triggers.restartingClusters())
restartingClusters.addString(clusterId.value());
Cursor reindexings = object.setArray(REINDEXINGS);
for (Reindexing reindexing : triggers.reindexings()) {
Cursor entry = reindexings.addObject();
entry.setString(CLUSTER_NAME, reindexing.clusterId());
entry.setString(DOCUMENT_TYPE, reindexing.documentType());
}
}
public static ActivationTriggers fromSlime(Cursor object) {
if ( ! object.valid())
return ActivationTriggers.empty();
List<NodeRestart> nodeRestarts = SlimeUtils.entriesStream(object.field(NODE_RESTARTS))
.map(entry -> new NodeRestart(entry.asString()))
.toList();
List<ClusterSpec.Id> restartingClusters = SlimeUtils.entriesStream(object.field(RESTARTING_CLUSTERS))
.map(entry -> ClusterSpec.Id.from(entry.asString()))
.toList();
List<Reindexing> reindexings = SlimeUtils.entriesStream(object.field(REINDEXINGS))
.map(entry -> new Reindexing(entry.field(CLUSTER_NAME).asString(),
entry.field(DOCUMENT_TYPE).asString()))
.toList();
return new ActivationTriggers(nodeRestarts, restartingClusters, reindexings);
}
}
|