Guest User

Untitled

a guest
Jun 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.78 KB | None | 0 0
  1. package voldemort;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.Collections;
  7. import java.util.HashMap;
  8. import java.util.LinkedList;
  9. import java.util.List;
  10.  
  11. import voldemort.cluster.Cluster;
  12. import voldemort.cluster.Node;
  13. import voldemort.cluster.Zone;
  14. import voldemort.routing.RoutingStrategyType;
  15. import voldemort.store.StoreDefinition;
  16. import voldemort.store.StoreDefinitionBuilder;
  17. import voldemort.store.slop.strategy.HintedHandoffStrategyType;
  18. import voldemort.xml.ClusterMapper;
  19. import voldemort.xml.StoreDefinitionsMapper;
  20.  
  21. import com.google.common.collect.Lists;
  22. import com.google.common.collect.Maps;
  23.  
  24. public class UpdateXml {
  25.  
  26. public static void main(String args[]) throws IOException {
  27. if(args.length != 2) {
  28. System.err.println("<cluster.xml_path> <stores.xml_path>");
  29. System.exit(-1);
  30. }
  31.  
  32. String clusterXmlPath = args[0];
  33. String storesXmlPath = args[1];
  34.  
  35. File clusterXml = new File(clusterXmlPath);
  36. File storesXml = new File(storesXmlPath);
  37.  
  38. File parentDir = clusterXml.getParentFile();
  39. String directoryName = clusterXml.getParentFile().getName();
  40.  
  41. if(!clusterXml.exists() || !storesXml.exists()) {
  42. System.err.println("<cluster.xml_path> <stores.xml_path>");
  43. System.exit(-1);
  44. }
  45.  
  46. ClusterMapper clusterMapper = new ClusterMapper();
  47. Cluster cluster = clusterMapper.readCluster(clusterXml);
  48.  
  49. StoreDefinitionsMapper storeDefMapper = new StoreDefinitionsMapper();
  50. List<StoreDefinition> storeDefs = storeDefMapper.readStoreList(storesXml);
  51.  
  52. // Generate two zones
  53. List<Zone> zones = Lists.newArrayList();
  54.  
  55. LinkedList<Integer> ll0 = Lists.newLinkedList();
  56. ll0.add(1);
  57. LinkedList<Integer> ll1 = Lists.newLinkedList();
  58. ll1.add(0);
  59. zones.add(new Zone(0, ll0));
  60. zones.add(new Zone(1, ll1));
  61.  
  62. // Generate the number of nodes
  63. List<Node> newNodes = Lists.newArrayListWithCapacity(2 * cluster.getNumberOfNodes());
  64.  
  65. for(Node node: cluster.getNodes()) {
  66. List<Integer> partitions = Lists.newArrayList(node.getPartitionIds());
  67. Collections.shuffle(partitions);
  68.  
  69. // Keep in first zone
  70. List<Integer> firstPartitions = Lists.newArrayList();
  71. int numPartitionsPerZone = partitions.size() / 2;
  72. if(numPartitionsPerZone <= 0) {
  73. System.err.println("Can't copy partitions from one to another since found "
  74. + partitions.size() + " partition(s) on node " + node);
  75. System.exit(-1);
  76. }
  77.  
  78. for(int i = 0; i < numPartitionsPerZone; i++) {
  79. firstPartitions.add(partitions.get(i));
  80. }
  81.  
  82. // Push to second zone
  83. List<Integer> secondPartitions = Lists.newArrayList();
  84. for(int i = numPartitionsPerZone; i < partitions.size(); i++) {
  85. secondPartitions.add(partitions.get(i));
  86. }
  87.  
  88. newNodes.add(new Node(node.getId(),
  89. node.getHost(),
  90. node.getHttpPort(),
  91. node.getSocketPort(),
  92. node.getAdminPort(),
  93. 0,
  94. firstPartitions));
  95. newNodes.add(new Node(cluster.getNumberOfNodes() + node.getId(),
  96. "FILLME",
  97. node.getHttpPort(),
  98. node.getSocketPort(),
  99. node.getAdminPort(),
  100. 1,
  101. secondPartitions));
  102. }
  103.  
  104. Cluster newCluster = new Cluster(cluster.getName(), newNodes, zones);
  105.  
  106. // ////////WITH STORES.XML /////////
  107.  
  108. List<StoreDefinition> newStoreDefs = Lists.newArrayListWithExpectedSize(storeDefs.size());
  109.  
  110. for(StoreDefinition def: storeDefs) {
  111.  
  112. HashMap<Integer, Integer> zoneReplicationFactor = Maps.newHashMap();
  113. zoneReplicationFactor.put(0, def.getReplicationFactor());
  114. zoneReplicationFactor.put(1, def.getReplicationFactor());
  115.  
  116. StoreDefinition newDef = new StoreDefinitionBuilder().setName(def.getName())
  117. .setType(def.getType())
  118. .setKeySerializer(def.getKeySerializer())
  119. .setValueSerializer(def.getValueSerializer())
  120. .setRoutingPolicy(def.getRoutingPolicy())
  121. .setRoutingStrategyType(RoutingStrategyType.ZONE_STRATEGY)
  122. .setReplicationFactor(def.getReplicationFactor() * 2)
  123. .setPreferredReads(def.getPreferredReads())
  124. .setRequiredReads(def.getRequiredReads())
  125. .setPreferredWrites(def.getPreferredWrites())
  126. .setRequiredWrites(def.getRequiredWrites())
  127. .setRetentionPeriodDays(def.getRetentionDays())
  128. .setRetentionScanThrottleRate(def.getRetentionScanThrottleRate())
  129. .setZoneReplicationFactor(zoneReplicationFactor)
  130. .setZoneCountReads(0)
  131. .setZoneCountWrites(0)
  132. .setHintedHandoffStrategy(HintedHandoffStrategyType.PROXIMITY_STRATEGY)
  133. .build();
  134. newStoreDefs.add(newDef);
  135. }
  136.  
  137. // ///// WRITE THE FILES //////////
  138.  
  139. File newClusterXml = new File(parentDir, directoryName + "_cluster.xml");
  140. File newStoresXml = new File(parentDir, directoryName + "_stores.xml");
  141.  
  142. String clusterString = clusterMapper.writeCluster(newCluster);
  143. String storesString = storeDefMapper.writeStoreList(newStoreDefs);
  144.  
  145. FileOutputStream stream = new FileOutputStream(newClusterXml);
  146. stream.write(clusterString.getBytes());
  147. stream.close();
  148.  
  149. stream = new FileOutputStream(newStoresXml);
  150. stream.write(storesString.getBytes());
  151. stream.close();
  152.  
  153. }
  154. }
Add Comment
Please, Sign In to add comment