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); } }
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; }