Skip to content

Commit

Permalink
Introduce session setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Rana Alotaibi authored and Rana Alotaibi committed Dec 12, 2023
1 parent 65322e9 commit 34c1bcb
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 0 deletions.
2 changes: 2 additions & 0 deletions config/sqlserver/sample_tpch_config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
<password>P@ssw0rd</password>
<isolation>TRANSACTION_SERIALIZABLE</isolation>
<batchsize>1024</batchsize>
<!-- Session setup statements file -->
<!-- <sessionsetupfile>data/session-setup-files/session_setup_sqlserver_cmds_example.sql</sessionsetupfile> -->

<scalefactor>0.1</scalefactor>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- SQL Server Database Console Command statements (DBCC)
DBCC DROPCLEANBUFFERS -- clear buffers (for cold runs)
DBCC FREEPROCCACHE -- clean plan cache
2 changes: 2 additions & 0 deletions src/main/java/com/oltpbenchmark/DBWorkload.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ public static void main(String[] args) throws Exception {
wrkld.setPassword(xmlConfig.getString("password"));
wrkld.setRandomSeed(xmlConfig.getInt("randomSeed", -1));
wrkld.setBatchSize(xmlConfig.getInt("batchsize", 128));
wrkld.setSessionSetupFile(xmlConfig.getString("sessionsetupfile"));
wrkld.setMaxRetries(xmlConfig.getInt("retries", 3));
wrkld.setNewConnectionPerTxn(xmlConfig.getBoolean("newConnectionPerTxn", false));

Expand Down Expand Up @@ -169,6 +170,7 @@ public static void main(String[] args) throws Exception {
initDebug.put("URL", wrkld.getUrl());
initDebug.put("Isolation", wrkld.getIsolationString());
initDebug.put("Batch Size", wrkld.getBatchSize());
initDebug.put("Session Setup File", wrkld.getSessionSetupFile());
initDebug.put("Scale Factor", wrkld.getScaleFactor());
initDebug.put("Terminals", wrkld.getTerminals());
initDebug.put("New Connection Per Txn", wrkld.getNewConnectionPerTxn());
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/oltpbenchmark/WorkloadConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class WorkloadConfiguration {
private String password;
private String driverClass;
private int batchSize;
private String sessionSetupFile;
private int maxRetries;
private int randomSeed = -1;
private double scaleFactor = 1.0;
Expand Down Expand Up @@ -116,6 +117,10 @@ public void setBatchSize(int batchSize) {
this.batchSize = batchSize;
}

public String getSessionSetupFile(){ return sessionSetupFile; }

public void setSessionSetupFile(String sessionSetupFile){ this.sessionSetupFile = sessionSetupFile; }

public int getMaxRetries() {
return maxRetries;
}
Expand Down Expand Up @@ -337,6 +342,7 @@ public String toString() {
", password='" + password + '\'' +
", driverClass='" + driverClass + '\'' +
", batchSize=" + batchSize +
", setupSessionFile=" + sessionSetupFile +
", maxRetries=" + maxRetries +
", scaleFactor=" + scaleFactor +
", selectivity=" + selectivity +
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/com/oltpbenchmark/api/Worker.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
Expand Down Expand Up @@ -191,6 +194,13 @@ public final void run() {
// In case of reuse reset the measurements
latencies = new LatencyRecord(workloadState.getTestStartNs());

// Invoke setup session
try {
this.setupSession();
} catch (Throwable ex) {
throw new RuntimeException("Unexpected error when setting up the session " + this, ex);
}

// Invoke initialize callback
try {
this.initialize();
Expand Down Expand Up @@ -520,6 +530,31 @@ protected void initialize() {
// The default is to do nothing
}

/**
* Set up the session by running a set of statements before benchmark execution begins.
* The path of the file where a set of statements defined should be added
* in &lt;sessionsetupfile&gt; &lt;/sessionsetupfile&gt;
*/
protected void setupSession() {
try {
String setupSessionFile = configuration.getSessionSetupFile();
if (setupSessionFile == null || setupSessionFile.isEmpty()) {
return;
}

String statements = new String(Files.readAllBytes(Paths.get(setupSessionFile)));
if (statements.isEmpty()) {
return;
}

try (Statement stmt = conn.createStatement()) {
stmt.execute(statements);
}
} catch (SQLException | IOException ex) {
throw new RuntimeException("Failed setting up session", ex);
}
}

/**
* Invoke a single transaction for the given TransactionType
*
Expand Down

0 comments on commit 34c1bcb

Please sign in to comment.