Ejemplo n.º 1
0
  public void openSystemStore(StoreDefinition storeDef) {

    logger.info("Opening system store '" + storeDef.getName() + "' (" + storeDef.getType() + ").");

    StorageConfiguration config = storageConfigs.get(storeDef.getType());
    if (config == null)
      throw new ConfigurationException(
          "Attempt to open system store "
              + storeDef.getName()
              + " but "
              + storeDef.getType()
              + " storage engine has not been enabled.");

    final StorageEngine<ByteArray, byte[], byte[]> engine = config.getStore(storeDef, null);

    // Noted that there is no read-only processing as for user stores.

    // openStore() should have atomic semantics
    try {
      registerSystemEngine(engine);

      if (voldemortConfig.isServerRoutingEnabled())
        registerNodeStores(storeDef, metadata.getCluster(), voldemortConfig.getNodeId());

      if (storeDef.hasRetentionPeriod()) scheduleCleanupJob(storeDef, engine);
    } catch (Exception e) {
      unregisterSystemEngine(engine);
      throw new VoldemortException(e);
    }
  }
Ejemplo n.º 2
0
  public StorageEngine<ByteArray, byte[], byte[]> openStore(StoreDefinition storeDef) {

    logger.info("Opening store '" + storeDef.getName() + "' (" + storeDef.getType() + ").");

    StorageConfiguration config = storageConfigs.get(storeDef.getType());
    if (config == null)
      throw new ConfigurationException(
          "Attempt to open store "
              + storeDef.getName()
              + " but "
              + storeDef.getType()
              + " storage engine has not been enabled.");

    boolean isReadOnly = storeDef.getType().compareTo(ReadOnlyStorageConfiguration.TYPE_NAME) == 0;
    final RoutingStrategy routingStrategy =
        new RoutingStrategyFactory().updateRoutingStrategy(storeDef, metadata.getCluster());

    final StorageEngine<ByteArray, byte[], byte[]> engine =
        config.getStore(storeDef, routingStrategy);
    // Update the routing strategy + add listener to metadata
    if (storeDef.getType().compareTo(ReadOnlyStorageConfiguration.TYPE_NAME) == 0) {
      metadata.addMetadataStoreListener(
          storeDef.getName(),
          new MetadataStoreListener() {

            public void updateRoutingStrategy(RoutingStrategy updatedRoutingStrategy) {
              ((ReadOnlyStorageEngine) engine).setRoutingStrategy(updatedRoutingStrategy);
            }

            public void updateStoreDefinition(StoreDefinition storeDef) {
              return;
            }
          });
    }

    // openStore() should have atomic semantics
    try {
      registerEngine(engine, isReadOnly, storeDef.getType(), storeDef);

      if (voldemortConfig.isServerRoutingEnabled())
        registerNodeStores(storeDef, metadata.getCluster(), voldemortConfig.getNodeId());

      if (storeDef.hasRetentionPeriod()) scheduleCleanupJob(storeDef, engine);
    } catch (Exception e) {
      removeEngine(engine, isReadOnly, storeDef.getType(), false);
      throw new VoldemortException(e);
    }
    return engine;
  }