Changeset 4264
- Timestamp:
- 2010-09-16 12:48:17 (3 years ago)
- Location:
- trunk/indexer
- Files:
-
- 19 added
- 3 deleted
- 15 edited
- 1 copied
- 2 moved
-
admin-cli/pom.xml (modified) (1 diff)
-
admin-cli/src/main/java/org/lilycms/indexer/admin/cli/AddIndexCli.java (modified) (2 diffs)
-
admin-cli/src/main/java/org/lilycms/indexer/admin/cli/BaseIndexerAdminCli.java (modified) (17 diffs)
-
admin-cli/src/main/java/org/lilycms/indexer/admin/cli/ListIndexesCli.java (modified) (2 diffs)
-
admin-cli/src/main/java/org/lilycms/indexer/admin/cli/TouchIndexCli.java (modified) (2 diffs)
-
admin-cli/src/main/java/org/lilycms/indexer/admin/cli/UpdateIndexCli.java (modified) (2 diffs)
-
engine/src/main/java/org/lilycms/indexer/conf (deleted)
-
engine/src/main/java/org/lilycms/indexer/engine/IndexUpdater.java (moved) (moved from trunk/indexer/engine/src/main/java/org/lilycms/indexer/IndexUpdater.java) (1 diff)
-
engine/src/main/java/org/lilycms/indexer/engine/Indexer.java (moved) (moved from trunk/indexer/engine/src/main/java/org/lilycms/indexer/Indexer.java) (2 diffs)
-
engine/src/main/java/org/lilycms/indexer/engine/ValueEvaluator.java (modified) (1 diff)
-
engine/src/main/java/org/lilycms/indexer/formatter (deleted)
-
engine/src/main/resources (deleted)
-
engine/src/test/java/org/lilycms/indexer/test/DateYearFormatter.java (modified) (1 diff)
-
engine/src/test/java/org/lilycms/indexer/test/IndexerTest.java (modified) (2 diffs)
-
engine/src/test/java/org/lilycms/indexer/test/IntegerHierarchyUnderscoreFormatter.java (modified) (1 diff)
-
engine/src/test/resources/org/lilycms/indexer/test/indexerconf1.xml (modified) (1 diff)
-
fullbuild/src/main/java/org/lilycms/indexer/fullbuild/IndexingMapper.java (modified) (1 diff)
-
model/pom.xml (modified) (1 diff)
-
model/src/main/java/org/lilycms/indexer/model/impl/IndexerModelImpl.java (modified) (3 diffs)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/BaseValue.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/DefaultFormatter.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/DerefValue.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/FieldValue.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/Formatter.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/Formatters.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/IndexCase.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/IndexField.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/IndexerConf.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/IndexerConfBuilder.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/IndexerConfException.java (added)
-
model/src/main/java/org/lilycms/indexer/model/indexerconf/Value.java (added)
-
model/src/main/resources (added)
-
model/src/main/resources/org (added)
-
model/src/main/resources/org/lilycms (added)
-
model/src/main/resources/org/lilycms/indexer (added)
-
model/src/main/resources/org/lilycms/indexer/model (added)
-
model/src/main/resources/org/lilycms/indexer/model/indexerconf (added)
-
model/src/main/resources/org/lilycms/indexer/model/indexerconf/indexerconf.xsd (copied) (copied from trunk/indexer/engine/src/main/resources/org/lilycms/indexer/conf/indexerconf.xsd)
-
worker/src/main/java/org/lilycms/indexer/worker/IndexerWorker.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/indexer/admin-cli/pom.xml
r4246 r4264 47 47 <artifactId>joda-time</artifactId> 48 48 </dependency> 49 <dependency> 50 <groupId>log4j</groupId> 51 <artifactId>log4j</artifactId> 52 <scope>compile</scope> 53 </dependency> 54 <dependency> 55 <groupId>org.slf4j</groupId> 56 <artifactId>slf4j-log4j12</artifactId> 57 </dependency> 58 <dependency> 59 <groupId>org.lilycms</groupId> 60 <artifactId>lily-client</artifactId> 61 </dependency> 49 62 </dependencies> 50 63 -
trunk/indexer/admin-cli/src/main/java/org/lilycms/indexer/admin/cli/AddIndexCli.java
r4260 r4264 38 38 } 39 39 40 public voidrun(ZooKeeperItf zk, CommandLine cmd) throws Exception {40 public int run(ZooKeeperItf zk, CommandLine cmd) throws Exception { 41 41 WriteableIndexerModel model = new IndexerModelImpl(zk); 42 42 … … 62 62 63 63 System.out.println("Index created: " + indexName); 64 65 return 0; 64 66 } 65 67 -
trunk/indexer/admin-cli/src/main/java/org/lilycms/indexer/admin/cli/BaseIndexerAdminCli.java
r4260 r4264 3 3 import org.apache.commons.cli.*; 4 4 import org.apache.commons.io.FileUtils; 5 import org.apache.log4j.ConsoleAppender; 6 import org.apache.log4j.Level; 7 import org.apache.log4j.Logger; 8 import org.apache.log4j.PatternLayout; 5 9 import org.apache.zookeeper.WatchedEvent; 6 10 import org.apache.zookeeper.Watcher; 11 import org.lilycms.client.LilyClient; 7 12 import org.lilycms.indexer.model.api.IndexBatchBuildState; 8 13 import org.lilycms.indexer.model.api.IndexGeneralState; 9 14 import org.lilycms.indexer.model.api.IndexUpdateState; 15 import org.lilycms.indexer.model.api.IndexValidityException; 16 import org.lilycms.indexer.model.indexerconf.IndexerConfBuilder; 17 import org.lilycms.indexer.model.indexerconf.IndexerConfException; 18 import org.lilycms.indexer.model.sharding.ShardingConfigException; 10 19 import org.lilycms.util.zookeeper.ZooKeeperImpl; 11 20 import org.lilycms.util.zookeeper.ZooKeeperItf; 12 21 22 import java.io.ByteArrayInputStream; 13 23 import java.io.File; 14 24 import java.net.URI; … … 37 47 38 48 public static void start(String[] args, BaseIndexerAdminCli cli) { 49 setupLogging(); 50 int result = 1; 39 51 try { 40 cli.runBase(args); 52 System.out.println(); 53 result = cli.runBase(args); 54 } catch (IndexValidityException e) { 55 System.out.println("ATTENTION"); 56 System.out.println("---------"); 57 System.out.println("The index could not be created or updated because:"); 58 printExceptionMessages(e); 41 59 } catch (Throwable t) { 42 60 t.printStackTrace(); 43 61 } 44 } 45 46 public void runBase(String[] args) throws Exception { 62 System.out.println(); 63 64 if (result != 0) 65 System.exit(result); 66 } 67 68 private static void printExceptionMessages(Throwable throwable) { 69 Throwable cause = throwable; 70 while (cause != null) { 71 String prefix = ""; 72 if (cause instanceof IndexValidityException) { 73 prefix = "Index definition: "; 74 } else if (cause instanceof IndexerConfException) { 75 prefix = "Indexer configuration: "; 76 } else if (cause instanceof ShardingConfigException) { 77 prefix = "Sharding configuration: "; 78 } 79 System.out.println(prefix + cause.getMessage()); 80 cause = cause.getCause(); 81 } 82 } 83 84 private static void setupLogging() { 85 Logger rootLogger = Logger.getRootLogger(); 86 rootLogger.setLevel(Level.WARN); 87 88 final String CONSOLE_LAYOUT = "[%-5p][%d{ABSOLUTE}][%-10.10t] %c - %m%n"; 89 90 ConsoleAppender consoleAppender = new ConsoleAppender(); 91 consoleAppender.setLayout(new PatternLayout(CONSOLE_LAYOUT)); 92 93 consoleAppender.activateOptions(); 94 rootLogger.addAppender(consoleAppender); 95 } 96 97 public int runBase(String[] args) throws Exception { 47 98 Options cliOptions = new Options(); 48 99 … … 60 111 .create("z"); 61 112 cliOptions.addOption(zkOption); 113 114 Option forceOption = OptionBuilder 115 .withDescription("Skips optional validations.") 116 .withLongOpt("force") 117 .create("f"); 118 cliOptions.addOption(forceOption); 62 119 63 120 // … … 138 195 } catch (ParseException e) { 139 196 System.out.println(e.getMessage()); 197 System.out.println(); 140 198 showHelp = true; 141 199 } … … 146 204 if (showHelp || cmd.hasOption(helpOption.getOpt())) { 147 205 printHelp(cliOptions); 148 System.exit(1);206 return 1; 149 207 } 150 208 151 209 if (!cmd.hasOption(zkOption.getOpt())) { 152 System.out.println("Zookeeper connection string not specified, using default: " + DEFAULT_ZK_CONNECT); 210 System.out.println("ZooKeeper connection string not specified, using default: " + DEFAULT_ZK_CONNECT); 211 System.out.println(); 153 212 zkConnectionString = DEFAULT_ZK_CONNECT; 154 213 } else { … … 173 232 System.out.println("SOLR shards should be specified as 'name:URL' pairs, which the following is not:"); 174 233 System.out.println(shardEntry); 175 System.exit(1);234 return 1; 176 235 } 177 236 … … 180 239 System.out.println("Zero-length shard name in the following shard entry:"); 181 240 System.out.println(shardEntry); 182 System.exit(1);241 return 1; 183 242 } 184 243 … … 188 247 if (!uri.isAbsolute()) { 189 248 System.out.println("Not an absolute URI: " + shardAddress); 190 System.exit(1);249 return 1; 191 250 } 192 251 } catch (URISyntaxException e) { 193 252 System.out.println("Invalid SOLR shard URI: " + shardAddress); 194 253 System.out.println(e.getMessage()); 195 System.exit(1);254 return 1; 196 255 } 197 256 198 257 if (solrShards.containsKey(shardName)) { 199 258 System.out.println("Duplicate shard name: " + shardName); 200 System.exit(1);259 return 1; 201 260 } 202 261 … … 205 264 System.out.println("Warning: you have two shards pointing to the same URI:"); 206 265 System.out.println(shardAddress); 207 System.out.println();208 266 } 209 267 … … 216 274 // Probably cannot occur 217 275 System.out.println("No SOLR shards specified though option is used."); 218 System.exit(1);276 return 1; 219 277 } 220 278 } … … 226 284 System.out.println("Specified sharding configuration file not found:"); 227 285 System.out.println(configurationFile.getAbsolutePath()); 228 System.exit(1);286 return 1; 229 287 } 230 288 … … 238 296 System.out.println("Specified indexer configuration file not found:"); 239 297 System.out.println(configurationFile.getAbsolutePath()); 240 System.exit(1);298 return 1; 241 299 } 242 300 243 301 indexerConfiguration = FileUtils.readFileToByteArray(configurationFile); 302 303 if (!cmd.hasOption(forceOption.getOpt())) { 304 try { 305 LilyClient lilyClient = new LilyClient(zkConnectionString); 306 IndexerConfBuilder.build(new ByteArrayInputStream(indexerConfiguration), lilyClient.getRepository()); 307 } catch (Exception e) { 308 System.out.println(); // separator line because LilyClient might have produced some error logs 309 System.out.println("Failed to parse & build the indexer configuration."); 310 System.out.println(); 311 System.out.println("If this problem occurs because no Lily node is available"); 312 System.out.println("or because certain field types or record types do not exist,"); 313 System.out.println("then you can skip this validation using the option --" + forceOption.getLongOpt()); 314 System.out.println(); 315 if (e instanceof IndexerConfException) { 316 printExceptionMessages(e); 317 } else { 318 e.printStackTrace(); 319 } 320 return 1; 321 } 322 } 244 323 } 245 324 … … 250 329 } catch (IllegalArgumentException e) { 251 330 System.out.println("Invalid index state: " + stateName); 252 System.exit(1);331 return 1; 253 332 } 254 333 } … … 260 339 } catch (IllegalArgumentException e) { 261 340 System.out.println("Invalid index update state: " + stateName); 262 System.exit(1);341 return 1; 263 342 } 264 343 } … … 270 349 } catch (IllegalArgumentException e) { 271 350 System.out.println("Invalid index build state: " + stateName); 272 System.exit(1);351 return 1; 273 352 } 274 353 275 354 if (buildState != IndexBatchBuildState.BUILD_REQUESTED) { 276 355 System.out.println("The build state can only be set to " + IndexBatchBuildState.BUILD_REQUESTED); 277 System.exit(1);356 return 1; 278 357 } 279 358 } … … 281 360 ZooKeeperItf zk = new ZooKeeperImpl(zkConnectionString, 3000, new MyWatcher()); 282 361 283 r un(zk, cmd);362 return run(zk, cmd); 284 363 } 285 364 … … 296 375 public abstract List<Option> getOptions(); 297 376 298 public abstract voidrun(ZooKeeperItf zk, CommandLine cmd) throws Exception;377 public abstract int run(ZooKeeperItf zk, CommandLine cmd) throws Exception; 299 378 300 379 private class MyWatcher implements Watcher { -
trunk/indexer/admin-cli/src/main/java/org/lilycms/indexer/admin/cli/ListIndexesCli.java
r4260 r4264 28 28 } 29 29 30 public voidrun(ZooKeeperItf zk, CommandLine cmd) throws Exception {30 public int run(ZooKeeperItf zk, CommandLine cmd) throws Exception { 31 31 WriteableIndexerModel model = new IndexerModelImpl(zk); 32 32 … … 63 63 System.out.println(" + Job state: " + lastBatchBuild.getJobState()); 64 64 } 65 } 65 66 66 System.out.println(); 67 } 67 return 0; 68 68 } 69 69 } -
trunk/indexer/admin-cli/src/main/java/org/lilycms/indexer/admin/cli/TouchIndexCli.java
r4250 r4264 31 31 } 32 32 33 public voidrun(ZooKeeperItf zk, CommandLine cmd) throws Exception {33 public int run(ZooKeeperItf zk, CommandLine cmd) throws Exception { 34 34 WriteableIndexerModel model = new IndexerModelImpl(zk); 35 35 36 36 if (!model.hasIndex(indexName)) { 37 37 System.out.println("Index does not exist: " + indexName); 38 System.exit(1);38 return 1; 39 39 } 40 40 … … 48 48 model.unlockIndex(lock); 49 49 } 50 51 return 0; 50 52 } 51 53 } -
trunk/indexer/admin-cli/src/main/java/org/lilycms/indexer/admin/cli/UpdateIndexCli.java
r4260 r4264 39 39 } 40 40 41 public voidrun(ZooKeeperItf zk, CommandLine cmd) throws Exception {41 public int run(ZooKeeperItf zk, CommandLine cmd) throws Exception { 42 42 WriteableIndexerModel model = new IndexerModelImpl(zk); 43 43 44 44 if (!model.hasIndex(indexName)) { 45 45 System.out.println("Index does not exist: " + indexName); 46 System.exit(1);46 return 1; 47 47 } 48 48 … … 94 94 model.unlockIndex(lock); 95 95 } 96 97 return 0; 96 98 } 97 99 } -
trunk/indexer/engine/src/main/java/org/lilycms/indexer/engine/IndexUpdater.java
r4263 r4264 14 14 * limitations under the License. 15 15 */ 16 package org.lilycms.indexer ;16 package org.lilycms.indexer.engine; 17 17 18 18 import org.apache.commons.logging.Log; 19 19 import org.apache.commons.logging.LogFactory; 20 20 import org.apache.hadoop.metrics.*; 21 import org.lilycms.indexer. conf.DerefValue;22 import org.lilycms.indexer. conf.IndexCase;23 import org.lilycms.indexer. conf.IndexField;21 import org.lilycms.indexer.model.indexerconf.DerefValue; 22 import org.lilycms.indexer.model.indexerconf.IndexCase; 23 import org.lilycms.indexer.model.indexerconf.IndexField; 24 24 import org.lilycms.linkindex.LinkIndex; 25 25 import org.lilycms.repository.api.*; -
trunk/indexer/engine/src/main/java/org/lilycms/indexer/engine/Indexer.java
r4263 r4264 14 14 * limitations under the License. 15 15 */ 16 package org.lilycms.indexer ;16 package org.lilycms.indexer.engine; 17 17 18 18 import org.apache.commons.logging.Log; … … 25 25 import org.apache.solr.client.solrj.util.ClientUtils; 26 26 import org.apache.solr.common.SolrInputDocument; 27 import org.lilycms.indexer. conf.IndexCase;28 import org.lilycms.indexer. conf.IndexField;29 import org.lilycms.indexer. conf.IndexerConf;27 import org.lilycms.indexer.model.indexerconf.IndexCase; 28 import org.lilycms.indexer.model.indexerconf.IndexField; 29 import org.lilycms.indexer.model.indexerconf.IndexerConf; 30 30 import org.lilycms.indexer.engine.SolrServers; 31 31 import org.lilycms.indexer.engine.ValueEvaluator; -
trunk/indexer/engine/src/main/java/org/lilycms/indexer/engine/ValueEvaluator.java
r4263 r4264 8 8 import org.apache.tika.parser.Parser; 9 9 import org.apache.tika.sax.BodyContentHandler; 10 import org.lilycms.indexer. conf.DerefValue;11 import org.lilycms.indexer. conf.DerefValue.Follow;12 import org.lilycms.indexer. conf.DerefValue.FieldFollow;13 import org.lilycms.indexer. conf.DerefValue.VariantFollow;14 import org.lilycms.indexer. conf.DerefValue.MasterFollow;15 import org.lilycms.indexer. conf.FieldValue;16 import org.lilycms.indexer. conf.IndexerConf;17 import org.lilycms.indexer. conf.Value;18 import org.lilycms.indexer. formatter.Formatter;10 import org.lilycms.indexer.model.indexerconf.DerefValue; 11 import org.lilycms.indexer.model.indexerconf.DerefValue.Follow; 12 import org.lilycms.indexer.model.indexerconf.DerefValue.FieldFollow; 13 import org.lilycms.indexer.model.indexerconf.DerefValue.VariantFollow; 14 import org.lilycms.indexer.model.indexerconf.DerefValue.MasterFollow; 15 import org.lilycms.indexer.model.indexerconf.FieldValue; 16 import org.lilycms.indexer.model.indexerconf.IndexerConf; 17 import org.lilycms.indexer.model.indexerconf.Value; 18 import org.lilycms.indexer.model.indexerconf.Formatter; 19 19 import org.lilycms.repository.api.*; 20 20 import org.lilycms.util.io.Closer; -
trunk/indexer/engine/src/test/java/org/lilycms/indexer/test/DateYearFormatter.java
r4168 r4264 18 18 import org.joda.time.DateTime; 19 19 import org.joda.time.LocalDate; 20 import org.lilycms.indexer. formatter.DefaultFormatter;20 import org.lilycms.indexer.model.indexerconf.DefaultFormatter; 21 21 import org.lilycms.repository.api.ValueType; 22 22 -
trunk/indexer/engine/src/test/java/org/lilycms/indexer/test/IndexerTest.java
r4260 r4264 18 18 import static org.junit.Assert.assertEquals; 19 19 20 import org.lilycms.indexer.IndexUpdater; 20 import org.lilycms.indexer.engine.IndexUpdater; 21 import org.lilycms.indexer.engine.Indexer; 21 22 import org.lilycms.indexer.engine.SolrServers; 23 import org.lilycms.indexer.model.indexerconf.IndexerConfBuilder; 22 24 import org.lilycms.linkindex.LinkIndexUpdater; 23 25 import org.lilycms.util.repo.RecordEvent; … … 40 42 import org.junit.Test; 41 43 import org.lilycms.hbaseindex.IndexManager; 42 import org.lilycms.indexer.Indexer; 43 import org.lilycms.indexer.conf.IndexerConf; 44 import org.lilycms.indexer.conf.IndexerConfBuilder; 44 import org.lilycms.indexer.model.indexerconf.IndexerConf; 45 45 import org.lilycms.linkindex.LinkIndex; 46 46 import org.lilycms.repository.api.*; -
trunk/indexer/engine/src/test/java/org/lilycms/indexer/test/IntegerHierarchyUnderscoreFormatter.java
r4168 r4264 16 16 package org.lilycms.indexer.test; 17 17 18 import org.lilycms.indexer. formatter.Formatter;18 import org.lilycms.indexer.model.indexerconf.Formatter; 19 19 import org.lilycms.repository.api.HierarchyPath; 20 20 import org.lilycms.repository.api.ValueType; -
trunk/indexer/engine/src/test/resources/org/lilycms/indexer/test/indexerconf1.xml
r4257 r4264 11 11 12 12 <!-- Default formatter: handles any kind of value. --> 13 <formatter class="org.lilycms.indexer. formatter.DefaultFormatter"/>13 <formatter class="org.lilycms.indexer.model.indexerconf.DefaultFormatter"/> 14 14 15 15 <!-- The formatters below will only be used when referred to explictly by name, because the -
trunk/indexer/fullbuild/src/main/java/org/lilycms/indexer/fullbuild/IndexingMapper.java
r4260 r4264 9 9 import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 10 10 import org.apache.hadoop.hbase.mapreduce.TableMapper; 11 import org.lilycms.indexer. Indexer;12 import org.lilycms.indexer. conf.IndexerConf;13 import org.lilycms.indexer. conf.IndexerConfBuilder;11 import org.lilycms.indexer.engine.Indexer; 12 import org.lilycms.indexer.model.indexerconf.IndexerConf; 13 import org.lilycms.indexer.model.indexerconf.IndexerConfBuilder; 14 14 import org.lilycms.indexer.engine.SolrServers; 15 15 import org.lilycms.indexer.model.sharding.DefaultShardSelectorBuilder; -
trunk/indexer/model/pom.xml
r4260 r4264 43 43 <dependency> 44 44 <groupId>org.lilycms</groupId> 45 <artifactId>lily-repo-util</artifactId> 46 </dependency> 47 48 <dependency> 49 <groupId>org.lilycms</groupId> 45 50 <artifactId>lily-repository-api</artifactId> 46 51 </dependency> -
trunk/indexer/model/src/main/java/org/lilycms/indexer/model/impl/IndexerModelImpl.java
r4260 r4264 7 7 import static org.apache.zookeeper.Watcher.Event.EventType.*; 8 8 import org.lilycms.indexer.model.api.*; 9 import org.lilycms.indexer.model.indexerconf.IndexerConfBuilder; 10 import org.lilycms.indexer.model.indexerconf.IndexerConfException; 9 11 import org.lilycms.indexer.model.sharding.JsonShardSelectorBuilder; 10 12 import org.lilycms.indexer.model.sharding.ShardSelector; … … 14 16 import static org.lilycms.indexer.model.api.IndexerModelEventType.*; 15 17 18 import java.io.ByteArrayInputStream; 16 19 import java.net.URI; 17 20 import java.net.URISyntaxException; … … 161 164 } 162 165 } 166 167 try { 168 IndexerConfBuilder.validate(new ByteArrayInputStream(index.getConfiguration())); 169 } catch (IndexerConfException e) { 170 throw new IndexValidityException("The indexer configuration is not XML well-formed or valid.", e); 171 } 163 172 } 164 173 -
trunk/indexer/worker/src/main/java/org/lilycms/indexer/worker/IndexerWorker.java
r4260 r4264 5 5 import org.apache.commons.logging.Log; 6 6 import org.apache.commons.logging.LogFactory; 7 import org.lilycms.indexer. IndexUpdater;8 import org.lilycms.indexer. Indexer;9 import org.lilycms.indexer. conf.IndexerConf;10 import org.lilycms.indexer. conf.IndexerConfBuilder;7 import org.lilycms.indexer.engine.IndexUpdater; 8 import org.lilycms.indexer.engine.Indexer; 9 import org.lilycms.indexer.model.indexerconf.IndexerConf; 10 import org.lilycms.indexer.model.indexerconf.IndexerConfBuilder; 11 11 import org.lilycms.indexer.engine.SolrServers; 12 12 import org.lilycms.indexer.model.sharding.DefaultShardSelectorBuilder;
Note: See TracChangeset
for help on using the changeset viewer.