keith-turner commented on a change in pull request #370: ACCUMULO-4772 Update 
shell to use NewTableConfiguration methods
URL: https://github.com/apache/accumulo/pull/370#discussion_r164863051
 
 

 ##########
 File path: 
shell/src/main/java/org/apache/accumulo/shell/commands/CreateTableCommand.java
 ##########
 @@ -150,9 +168,67 @@ public int execute(final String fullCommand, final 
CommandLine cl, final Shell s
     return 0;
   }
 
+  /**
+   * Add supplied locality groups information to a NewTableConfiguration 
object.
+   *
+   * Used in conjunction with createtable shell command to allow locality 
groups to be configured upon table creation.
+   */
+  private NewTableConfiguration setLocalityForNewTable(CommandLine cl, 
NewTableConfiguration ntc) {
+    HashMap<String,Set<Text>> localityGroupMap = new HashMap<>();
+    String[] options = 
cl.getOptionValues(createTableOptLocalityProps.getOpt());
+    for (String localityInfo : options) {
+      final String parts[] = localityInfo.split("=", 2);
+      if (parts.length < 2)
+        throw new IllegalArgumentException("Missing '=' or there are spaces 
between entries");
+      final String groupName = parts[0];
+      final HashSet<Text> colFams = new HashSet<>();
+      for (String family : parts[1].split(","))
+        colFams.add(new Text(family.getBytes(Shell.CHARSET)));
+      localityGroupMap.put(groupName, colFams);
+    }
+    ntc.setLocalityGroups(localityGroupMap);
+    return ntc;
+  }
+
+  /**
+   * Add supplied iterator information to NewTableConfiguration object.
+   *
+   * Used in conjunction with createtable shell command to allow an iterator 
to be configured upon table creation.
+   */
+  private NewTableConfiguration attachIteratorToNewTable(CommandLine cl, Shell 
shellState, NewTableConfiguration ntc) {
+    if (shellState.iteratorProfiles.size() == 0)
+      throw new IllegalArgumentException("No shell iterator profiles have been 
created.");
+    String[] options = 
cl.getOptionValues(createTableOptIteratorProps.getOpt());
+    for (String profileInfo : options) {
+      String[] parts = profileInfo.split(":", 2);
+      if (parts.length < 2)
+        throw new IllegalArgumentException("Missing scope or there are spaces 
between parameters");
+      // get profile name
+      String profileName = parts[0];
+      IteratorSetting iteratorSetting = 
shellState.iteratorProfiles.get(profileName).get(0);
+      if (iteratorSetting == null)
+        throw new IllegalArgumentException("Provided iterator profile, " + 
profileName + ", does not exist");
+      // parse scope info
+      List<String> scopeList = Arrays.asList(parts[1].split(","));
+      if (scopeList.size() > 3) // max of three scope settings allowed
+        throw new IllegalArgumentException("Too many scopes supplied");
+      EnumSet<IteratorUtil.IteratorScope> scopes = 
EnumSet.noneOf(IteratorUtil.IteratorScope.class);
+      if (scopeList.contains("all") || scopeList.contains("scan"))
 
 Review comment:
   Will this code ignore an unknown scope?  For example if I gave the scopes 
`scan,nimc`, I think it would not complain about `nimc`.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to