package com.ldbc.driver.workloads.ldbc.snb.interactive; import com.google.common.collect.Lists; import com.ldbc.driver.Operation; import com.ldbc.driver.WorkloadException; import com.ldbc.driver.control.ConsoleAndFileDriverConfiguration; import com.ldbc.driver.control.DriverConfigurationException; import com.ldbc.driver.control.DriverConfigurationFileHelper; import com.ldbc.driver.util.FileUtils; import com.ldbc.driver.util.MapUtils; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import static java.lang.String.format; public class LdbcSnbInteractiveWorkloadConfiguration { public static final int WRITE_OPERATION_NO_RESULT_DEFAULT_RESULT = -1; public final static String LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX = "ldbc.snb.interactive."; // directory that contains the substitution parameters files public final static String PARAMETERS_DIRECTORY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + "parameters_dir"; // directory containing forum and person update event streams public final static String UPDATES_DIRECTORY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + "updates_dir"; // Short reads random walk dissipation rate, in the interval [1.0-0.0] // Higher values translate to shorter walks and therefore fewer short reads public final static String SHORT_READ_DISSIPATION = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + "short_read_dissipation"; // Average distance between updates in simulation time public final static String UPDATE_INTERLEAVE = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + "update_interleave"; // The parser implementation to use when reading update events public enum UpdateStreamParser { REGEX, CHAR_SEEKER, CHAR_SEEKER_THREAD } public final static String UPDATE_STREAM_PARSER = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + "update_parser"; public final static UpdateStreamParser DEFAULT_UPDATE_STREAM_PARSER = UpdateStreamParser.CHAR_SEEKER; public final static String LDBC_INTERACTIVE_PACKAGE_PREFIX = removeSuffix( LdbcQuery1.class.getName(), LdbcQuery1.class.getSimpleName() ); /* * Operation Interleave */ public final static String INTERLEAVE_SUFFIX = "_interleave"; public final static String READ_OPERATION_1_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery1.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_2_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery2.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_3_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery3.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_4_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery4.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_5_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery5.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_6_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery6.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_7_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery7.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_8_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery8.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_9_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery9.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_10_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery10.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_11_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery11.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_12_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery12.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_13_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery13.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static String READ_OPERATION_14_INTERLEAVE_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery14.class.getSimpleName() + INTERLEAVE_SUFFIX; public final static List<String> READ_OPERATION_INTERLEAVE_KEYS = Lists.newArrayList( READ_OPERATION_1_INTERLEAVE_KEY, READ_OPERATION_2_INTERLEAVE_KEY, READ_OPERATION_3_INTERLEAVE_KEY, READ_OPERATION_4_INTERLEAVE_KEY, READ_OPERATION_5_INTERLEAVE_KEY, READ_OPERATION_6_INTERLEAVE_KEY, READ_OPERATION_7_INTERLEAVE_KEY, READ_OPERATION_8_INTERLEAVE_KEY, READ_OPERATION_9_INTERLEAVE_KEY, READ_OPERATION_10_INTERLEAVE_KEY, READ_OPERATION_11_INTERLEAVE_KEY, READ_OPERATION_12_INTERLEAVE_KEY, READ_OPERATION_13_INTERLEAVE_KEY, READ_OPERATION_14_INTERLEAVE_KEY ); /* * Operation frequency */ public final static String FREQUENCY_SUFFIX = "_freq"; public final static String READ_OPERATION_1_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery1.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_2_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery2.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_3_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery3.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_4_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery4.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_5_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery5.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_6_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery6.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_7_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery7.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_8_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery8.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_9_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery9.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_10_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery10.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_11_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery11.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_12_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery12.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_13_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery13.class.getSimpleName() + FREQUENCY_SUFFIX; public final static String READ_OPERATION_14_FREQUENCY_KEY = LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + LdbcQuery14.class.getSimpleName() + FREQUENCY_SUFFIX; public final static List<String> READ_OPERATION_FREQUENCY_KEYS = Lists.newArrayList( READ_OPERATION_1_FREQUENCY_KEY, READ_OPERATION_2_FREQUENCY_KEY, READ_OPERATION_3_FREQUENCY_KEY, READ_OPERATION_4_FREQUENCY_KEY, READ_OPERATION_5_FREQUENCY_KEY, READ_OPERATION_6_FREQUENCY_KEY, READ_OPERATION_7_FREQUENCY_KEY, READ_OPERATION_8_FREQUENCY_KEY, READ_OPERATION_9_FREQUENCY_KEY, READ_OPERATION_10_FREQUENCY_KEY, READ_OPERATION_11_FREQUENCY_KEY, READ_OPERATION_12_FREQUENCY_KEY, READ_OPERATION_13_FREQUENCY_KEY, READ_OPERATION_14_FREQUENCY_KEY ); private static Map<Integer,String> typeToInterleaveKeyMapping() { Map<Integer,String> mapping = new HashMap<>(); mapping.put( LdbcQuery1.TYPE, READ_OPERATION_1_INTERLEAVE_KEY ); mapping.put( LdbcQuery2.TYPE, READ_OPERATION_2_INTERLEAVE_KEY ); mapping.put( LdbcQuery3.TYPE, READ_OPERATION_3_INTERLEAVE_KEY ); mapping.put( LdbcQuery4.TYPE, READ_OPERATION_4_INTERLEAVE_KEY ); mapping.put( LdbcQuery5.TYPE, READ_OPERATION_5_INTERLEAVE_KEY ); mapping.put( LdbcQuery6.TYPE, READ_OPERATION_6_INTERLEAVE_KEY ); mapping.put( LdbcQuery7.TYPE, READ_OPERATION_7_INTERLEAVE_KEY ); mapping.put( LdbcQuery8.TYPE, READ_OPERATION_8_INTERLEAVE_KEY ); mapping.put( LdbcQuery9.TYPE, READ_OPERATION_9_INTERLEAVE_KEY ); mapping.put( LdbcQuery10.TYPE, READ_OPERATION_10_INTERLEAVE_KEY ); mapping.put( LdbcQuery11.TYPE, READ_OPERATION_11_INTERLEAVE_KEY ); mapping.put( LdbcQuery12.TYPE, READ_OPERATION_12_INTERLEAVE_KEY ); mapping.put( LdbcQuery13.TYPE, READ_OPERATION_13_INTERLEAVE_KEY ); mapping.put( LdbcQuery14.TYPE, READ_OPERATION_14_INTERLEAVE_KEY ); return mapping; } public final static Map<Integer,String> OPERATION_TYPE_TO_INTERLEAVE_KEY_MAPPING = typeToInterleaveKeyMapping(); // Default value in case there is no update stream public final static String DEFAULT_UPDATE_INTERLEAVE = "1"; /* * Operation Enable */ public final static String ENABLE_SUFFIX = "_enable"; public final static String LONG_READ_OPERATION_1_ENABLE_KEY = asEnableKey( LdbcQuery1.class ); public final static String LONG_READ_OPERATION_2_ENABLE_KEY = asEnableKey( LdbcQuery2.class ); public final static String LONG_READ_OPERATION_3_ENABLE_KEY = asEnableKey( LdbcQuery3.class ); public final static String LONG_READ_OPERATION_4_ENABLE_KEY = asEnableKey( LdbcQuery4.class ); public final static String LONG_READ_OPERATION_5_ENABLE_KEY = asEnableKey( LdbcQuery5.class ); public final static String LONG_READ_OPERATION_6_ENABLE_KEY = asEnableKey( LdbcQuery6.class ); public final static String LONG_READ_OPERATION_7_ENABLE_KEY = asEnableKey( LdbcQuery7.class ); public final static String LONG_READ_OPERATION_8_ENABLE_KEY = asEnableKey( LdbcQuery8.class ); public final static String LONG_READ_OPERATION_9_ENABLE_KEY = asEnableKey( LdbcQuery9.class ); public final static String LONG_READ_OPERATION_10_ENABLE_KEY = asEnableKey( LdbcQuery10.class ); public final static String LONG_READ_OPERATION_11_ENABLE_KEY = asEnableKey( LdbcQuery11.class ); public final static String LONG_READ_OPERATION_12_ENABLE_KEY = asEnableKey( LdbcQuery12.class ); public final static String LONG_READ_OPERATION_13_ENABLE_KEY = asEnableKey( LdbcQuery13.class ); public final static String LONG_READ_OPERATION_14_ENABLE_KEY = asEnableKey( LdbcQuery14.class ); public final static List<String> LONG_READ_OPERATION_ENABLE_KEYS = Lists.newArrayList( LONG_READ_OPERATION_1_ENABLE_KEY, LONG_READ_OPERATION_2_ENABLE_KEY, LONG_READ_OPERATION_3_ENABLE_KEY, LONG_READ_OPERATION_4_ENABLE_KEY, LONG_READ_OPERATION_5_ENABLE_KEY, LONG_READ_OPERATION_6_ENABLE_KEY, LONG_READ_OPERATION_7_ENABLE_KEY, LONG_READ_OPERATION_8_ENABLE_KEY, LONG_READ_OPERATION_9_ENABLE_KEY, LONG_READ_OPERATION_10_ENABLE_KEY, LONG_READ_OPERATION_11_ENABLE_KEY, LONG_READ_OPERATION_12_ENABLE_KEY, LONG_READ_OPERATION_13_ENABLE_KEY, LONG_READ_OPERATION_14_ENABLE_KEY ); public final static String SHORT_READ_OPERATION_1_ENABLE_KEY = asEnableKey( LdbcShortQuery1PersonProfile.class ); public final static String SHORT_READ_OPERATION_2_ENABLE_KEY = asEnableKey( LdbcShortQuery2PersonPosts.class ); public final static String SHORT_READ_OPERATION_3_ENABLE_KEY = asEnableKey( LdbcShortQuery3PersonFriends.class ); public final static String SHORT_READ_OPERATION_4_ENABLE_KEY = asEnableKey( LdbcShortQuery4MessageContent.class ); public final static String SHORT_READ_OPERATION_5_ENABLE_KEY = asEnableKey( LdbcShortQuery5MessageCreator.class ); public final static String SHORT_READ_OPERATION_6_ENABLE_KEY = asEnableKey( LdbcShortQuery6MessageForum.class ); public final static String SHORT_READ_OPERATION_7_ENABLE_KEY = asEnableKey( LdbcShortQuery7MessageReplies.class ); public final static List<String> SHORT_READ_OPERATION_ENABLE_KEYS = Lists.newArrayList( SHORT_READ_OPERATION_1_ENABLE_KEY, SHORT_READ_OPERATION_2_ENABLE_KEY, SHORT_READ_OPERATION_3_ENABLE_KEY, SHORT_READ_OPERATION_4_ENABLE_KEY, SHORT_READ_OPERATION_5_ENABLE_KEY, SHORT_READ_OPERATION_6_ENABLE_KEY, SHORT_READ_OPERATION_7_ENABLE_KEY ); public final static String WRITE_OPERATION_1_ENABLE_KEY = asEnableKey( LdbcUpdate1AddPerson.class ); public final static String WRITE_OPERATION_2_ENABLE_KEY = asEnableKey( LdbcUpdate2AddPostLike.class ); public final static String WRITE_OPERATION_3_ENABLE_KEY = asEnableKey( LdbcUpdate3AddCommentLike.class ); public final static String WRITE_OPERATION_4_ENABLE_KEY = asEnableKey( LdbcUpdate4AddForum.class ); public final static String WRITE_OPERATION_5_ENABLE_KEY = asEnableKey( LdbcUpdate5AddForumMembership.class ); public final static String WRITE_OPERATION_6_ENABLE_KEY = asEnableKey( LdbcUpdate6AddPost.class ); public final static String WRITE_OPERATION_7_ENABLE_KEY = asEnableKey( LdbcUpdate7AddComment.class ); public final static String WRITE_OPERATION_8_ENABLE_KEY = asEnableKey( LdbcUpdate8AddFriendship.class ); public final static List<String> WRITE_OPERATION_ENABLE_KEYS = Lists.newArrayList( WRITE_OPERATION_1_ENABLE_KEY, WRITE_OPERATION_2_ENABLE_KEY, WRITE_OPERATION_3_ENABLE_KEY, WRITE_OPERATION_4_ENABLE_KEY, WRITE_OPERATION_5_ENABLE_KEY, WRITE_OPERATION_6_ENABLE_KEY, WRITE_OPERATION_7_ENABLE_KEY, WRITE_OPERATION_8_ENABLE_KEY ); private static String asEnableKey( Class<? extends Operation> operation ) { return LDBC_SNB_INTERACTIVE_PARAM_NAME_PREFIX + operation.getSimpleName() + ENABLE_SUFFIX; } /* * Read Operation Parameters */ public final static String READ_OPERATION_1_PARAMS_FILENAME = "query_1_param.txt"; public final static String READ_OPERATION_2_PARAMS_FILENAME = "query_2_param.txt"; public final static String READ_OPERATION_3_PARAMS_FILENAME = "query_3_param.txt"; public final static String READ_OPERATION_4_PARAMS_FILENAME = "query_4_param.txt"; public final static String READ_OPERATION_5_PARAMS_FILENAME = "query_5_param.txt"; public final static String READ_OPERATION_6_PARAMS_FILENAME = "query_6_param.txt"; public final static String READ_OPERATION_7_PARAMS_FILENAME = "query_7_param.txt"; public final static String READ_OPERATION_8_PARAMS_FILENAME = "query_8_param.txt"; public final static String READ_OPERATION_9_PARAMS_FILENAME = "query_9_param.txt"; public final static String READ_OPERATION_10_PARAMS_FILENAME = "query_10_param.txt"; public final static String READ_OPERATION_11_PARAMS_FILENAME = "query_11_param.txt"; public final static String READ_OPERATION_12_PARAMS_FILENAME = "query_12_param.txt"; public final static String READ_OPERATION_13_PARAMS_FILENAME = "query_13_param.txt"; public final static String READ_OPERATION_14_PARAMS_FILENAME = "query_14_param.txt"; public final static List<String> READ_OPERATION_PARAMS_FILENAMES = Lists.newArrayList( READ_OPERATION_1_PARAMS_FILENAME, READ_OPERATION_2_PARAMS_FILENAME, READ_OPERATION_3_PARAMS_FILENAME, READ_OPERATION_4_PARAMS_FILENAME, READ_OPERATION_5_PARAMS_FILENAME, READ_OPERATION_6_PARAMS_FILENAME, READ_OPERATION_7_PARAMS_FILENAME, READ_OPERATION_8_PARAMS_FILENAME, READ_OPERATION_9_PARAMS_FILENAME, READ_OPERATION_10_PARAMS_FILENAME, READ_OPERATION_11_PARAMS_FILENAME, READ_OPERATION_12_PARAMS_FILENAME, READ_OPERATION_13_PARAMS_FILENAME, READ_OPERATION_14_PARAMS_FILENAME ); /* * Write Operation Parameters */ public final static String PIPE_SEPARATOR_REGEX = "\\|"; public static Map<String,String> convertFrequenciesToInterleaves( Map<String,String> params ) { Integer updateDistance = Integer.parseInt( params.get( UPDATE_INTERLEAVE ) ); Integer interleave = Integer.parseInt( params.get( READ_OPERATION_1_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_1_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_2_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_2_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_3_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_3_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_4_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_4_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_5_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_5_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_6_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_6_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_7_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_7_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_8_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_8_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_9_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_9_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_10_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_10_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_11_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_11_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_12_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_12_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_13_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_13_INTERLEAVE_KEY, interleave.toString() ); interleave = Integer.parseInt( params.get( READ_OPERATION_14_FREQUENCY_KEY ) ) * updateDistance; params.put( READ_OPERATION_14_INTERLEAVE_KEY, interleave.toString() ); return params; } public static File defaultConfigFileSF1() throws DriverConfigurationException { return defaultConfigFileSF1FromWorkloadsDirectory( DriverConfigurationFileHelper.getWorkloadsDirectory() ); } public static File defaultConfigFileSF1( File driverRootDirectory ) throws DriverConfigurationException { return defaultConfigFileSF1FromWorkloadsDirectory( DriverConfigurationFileHelper.getWorkloadsDirectory( driverRootDirectory ) ); } private static File defaultConfigFileSF1FromWorkloadsDirectory( File workloadsDirectory ) throws DriverConfigurationException { return new File( workloadsDirectory, "ldbc/snb/interactive/ldbc_snb_interactive_SF-0001.properties" ); } public static Map<String,String> defaultConfigSF1() throws DriverConfigurationException, IOException { return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( MapUtils.loadPropertiesToMap( defaultConfigFileSF1() ) ); } public static Map<String,String> defaultReadOnlyConfigSF1() throws DriverConfigurationException, IOException { Map<String,String> params = withoutWrites( defaultConfigSF1() ); return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( params ); } public static Map<String,String> withoutOnly( Map<String,String> originalParams, Class<? extends Operation>... operationClasses ) throws DriverConfigurationException, IOException { Map<String,String> params = withoutWrites( withoutShortReads( withoutLongReads( originalParams ) ) ); for ( Class<? extends Operation> operationClass : operationClasses ) { params.put( asEnableKey( operationClass ), "true" ); } return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( params ); } public static Map<String,String> withoutShortReads( Map<String,String> originalParams ) throws DriverConfigurationException, IOException { Map<String,String> params = MapUtils.copyExcludingKeys( originalParams, new HashSet<String>() ); params.put( SHORT_READ_OPERATION_1_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_2_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_3_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_4_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_5_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_6_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_7_ENABLE_KEY, "false" ); return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( params ); } public static Map<String,String> withoutWrites( Map<String,String> originalParams ) throws DriverConfigurationException, IOException { Map<String,String> params = MapUtils.copyExcludingKeys( originalParams, new HashSet<String>() ); params.put( WRITE_OPERATION_1_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_2_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_3_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_4_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_5_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_6_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_7_ENABLE_KEY, "false" ); params.put( WRITE_OPERATION_8_ENABLE_KEY, "false" ); return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( params ); } public static Map<String,String> withoutLongReads( Map<String,String> originalParams ) throws DriverConfigurationException, IOException { Map<String,String> params = MapUtils.copyExcludingKeys( originalParams, new HashSet<String>() ); params.put( LONG_READ_OPERATION_1_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_2_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_3_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_4_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_5_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_6_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_7_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_8_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_9_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_10_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_11_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_12_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_13_ENABLE_KEY, "false" ); params.put( LONG_READ_OPERATION_14_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_1_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_2_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_3_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_4_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_5_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_6_ENABLE_KEY, "false" ); params.put( SHORT_READ_OPERATION_7_ENABLE_KEY, "false" ); return ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys( params ); } public static Map<Integer,Class<? extends Operation>> operationTypeToClassMapping() { Map<Integer,Class<? extends Operation>> operationTypeToClassMapping = new HashMap<>(); operationTypeToClassMapping.put( LdbcQuery1.TYPE, LdbcQuery1.class ); operationTypeToClassMapping.put( LdbcQuery2.TYPE, LdbcQuery2.class ); operationTypeToClassMapping.put( LdbcQuery3.TYPE, LdbcQuery3.class ); operationTypeToClassMapping.put( LdbcQuery4.TYPE, LdbcQuery4.class ); operationTypeToClassMapping.put( LdbcQuery5.TYPE, LdbcQuery5.class ); operationTypeToClassMapping.put( LdbcQuery6.TYPE, LdbcQuery6.class ); operationTypeToClassMapping.put( LdbcQuery7.TYPE, LdbcQuery7.class ); operationTypeToClassMapping.put( LdbcQuery8.TYPE, LdbcQuery8.class ); operationTypeToClassMapping.put( LdbcQuery9.TYPE, LdbcQuery9.class ); operationTypeToClassMapping.put( LdbcQuery10.TYPE, LdbcQuery10.class ); operationTypeToClassMapping.put( LdbcQuery11.TYPE, LdbcQuery11.class ); operationTypeToClassMapping.put( LdbcQuery12.TYPE, LdbcQuery12.class ); operationTypeToClassMapping.put( LdbcQuery13.TYPE, LdbcQuery13.class ); operationTypeToClassMapping.put( LdbcQuery14.TYPE, LdbcQuery14.class ); operationTypeToClassMapping.put( LdbcShortQuery1PersonProfile.TYPE, LdbcShortQuery1PersonProfile.class ); operationTypeToClassMapping.put( LdbcShortQuery2PersonPosts.TYPE, LdbcShortQuery2PersonPosts.class ); operationTypeToClassMapping.put( LdbcShortQuery3PersonFriends.TYPE, LdbcShortQuery3PersonFriends.class ); operationTypeToClassMapping.put( LdbcShortQuery4MessageContent.TYPE, LdbcShortQuery4MessageContent.class ); operationTypeToClassMapping.put( LdbcShortQuery5MessageCreator.TYPE, LdbcShortQuery5MessageCreator.class ); operationTypeToClassMapping.put( LdbcShortQuery6MessageForum.TYPE, LdbcShortQuery6MessageForum.class ); operationTypeToClassMapping.put( LdbcShortQuery7MessageReplies.TYPE, LdbcShortQuery7MessageReplies.class ); operationTypeToClassMapping.put( LdbcUpdate1AddPerson.TYPE, LdbcUpdate1AddPerson.class ); operationTypeToClassMapping.put( LdbcUpdate2AddPostLike.TYPE, LdbcUpdate2AddPostLike.class ); operationTypeToClassMapping.put( LdbcUpdate3AddCommentLike.TYPE, LdbcUpdate3AddCommentLike.class ); operationTypeToClassMapping.put( LdbcUpdate4AddForum.TYPE, LdbcUpdate4AddForum.class ); operationTypeToClassMapping.put( LdbcUpdate5AddForumMembership.TYPE, LdbcUpdate5AddForumMembership.class ); operationTypeToClassMapping.put( LdbcUpdate6AddPost.TYPE, LdbcUpdate6AddPost.class ); operationTypeToClassMapping.put( LdbcUpdate7AddComment.TYPE, LdbcUpdate7AddComment.class ); operationTypeToClassMapping.put( LdbcUpdate8AddFriendship.TYPE, LdbcUpdate8AddFriendship.class ); return operationTypeToClassMapping; } static String removeSuffix( String original, String suffix ) { return (!original.contains( suffix )) ? original : original.substring( 0, original.lastIndexOf( suffix ) ); } static String removePrefix( String original, String prefix ) { return (!original.contains( prefix )) ? original : original .substring( original.lastIndexOf( prefix ) + prefix.length(), original.length() ); } static Set<String> missingParameters( Map<String,String> properties, Iterable<String> compulsoryPropertyKeys ) { Set<String> missingPropertyKeys = new HashSet<>(); for ( String compulsoryKey : compulsoryPropertyKeys ) { if ( null == properties.get( compulsoryKey ) ) { missingPropertyKeys.add( compulsoryKey ); } } return missingPropertyKeys; } static boolean isValidParser( String parserString ) throws WorkloadException { try { UpdateStreamParser parser = UpdateStreamParser.valueOf( parserString ); Set<UpdateStreamParser> validParsers = new HashSet<>(); validParsers.addAll( Arrays.asList( UpdateStreamParser.values() ) ); return validParsers.contains( parser ); } catch ( IllegalArgumentException e ) { throw new WorkloadException( format( "Unsupported parser value: %s", parserString ), e ); } } public static List<File> forumUpdateFilesInDirectory( File directory ) { return FileUtils.filesWithSuffixInDirectory( directory, "_forum.csv" ); } public static List<File> personUpdateFilesInDirectory( File directory ) { return FileUtils.filesWithSuffixInDirectory( directory, "_person.csv" ); } }