Switch to java for basic graph impl

This commit is contained in:
Stuart Axelbrooke 2025-04-17 16:50:13 -07:00
parent f686867744
commit fda0dedea3
No known key found for this signature in database
GPG key ID: 1B0A848C29D46A35
7 changed files with 102 additions and 28 deletions

View file

@ -0,0 +1,2 @@
build --java_runtime_version=21
build --tool_java_runtime_version=21

View file

@ -1,4 +1,5 @@
load("@databuild//:rules.bzl", "databuild_graph", "databuild_job") load("@databuild//:rules.bzl", "databuild_graph", "databuild_job")
load("@rules_java//java:defs.bzl", "java_binary")
databuild_job( databuild_job(
name = "generate_number_job", name = "generate_number_job",
@ -6,12 +7,14 @@ databuild_job(
execute = ":generate_number_execute", execute = ":generate_number_execute",
) )
sh_binary( java_binary(
name = "generate_number_configure", name = "generate_number_configure",
srcs = ["configure.sh"], srcs = ["Configure.java"],
main_class = "com.databuild.examples.basic_graph.Configure",
) )
sh_binary( java_binary(
name = "generate_number_execute", name = "generate_number_execute",
srcs = ["execute.sh"], srcs = ["Execute.java"],
main_class = "com.databuild.examples.basic_graph.Execute",
) )

View file

@ -0,0 +1,24 @@
package com.databuild.examples.basic_graph;
/**
* Configure class for generating a random number.
* This class creates a job configuration for generating a random number based on the partition ref.
*/
public class Configure {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Error: Partition ref (output path) is required");
System.exit(1);
}
String partitionRef = args[0];
// Create a job config for generating a random number
String config = String.format(
"{\"outputs\":[\"%s\"],\"inputs\":[],\"args\":[\"%s\"],\"env\":{}}",
partitionRef, partitionRef
);
System.out.println(config);
}
}

View file

@ -0,0 +1,63 @@
package com.databuild.examples.basic_graph;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
/**
* Execute class for generating a random number.
* This class generates a random number based on the partition ref.
*/
public class Execute {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Error: Partition ref (output path) is required");
System.exit(1);
}
String partitionRef = args[0];
try {
// Create a hash of the partition ref to use as a seed
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hashBytes = md.digest(partitionRef.getBytes(StandardCharsets.UTF_8));
// Convert the first 8 bytes of the hash to a long to use as a seed
long seed = 0;
for (int i = 0; i < Math.min(8, hashBytes.length); i++) {
seed = (seed << 8) | (hashBytes[i] & 0xff);
}
// Create a random number generator with the seed
Random random = new Random(seed);
// Generate a random number
int randomNumber = random.nextInt(Integer.MAX_VALUE);
// Write the random number to the output file
try (FileWriter writer = new FileWriter(partitionRef)) {
writer.write("Random number for partition " + partitionRef + ": " + randomNumber);
}
System.out.println("Generated random number " + randomNumber + " for partition " + partitionRef);
// Write the random number to the output file
String outputPath = "/tmp/databuild/examples/basic_graph/" + partitionRef;
System.out.println("Writing random number " + randomNumber + " to " + outputPath);
// Ensure dir exists
new java.io.File(outputPath).getParentFile().mkdirs();
// Write number
try (FileWriter writer = new FileWriter(outputPath)) {
writer.write(String.valueOf(randomNumber));
}
} catch (NoSuchAlgorithmException | IOException e) {
System.err.println("Error: " + e.getMessage());
e.printStackTrace();
System.exit(1);
}
}
}

View file

@ -9,3 +9,9 @@ local_path_override(
module_name = "databuild", module_name = "databuild",
path = "../..", path = "../..",
) )
# Java dependencies
bazel_dep(name = "rules_java", version = "8.11.0")
# Configure JDK 17
register_toolchains("@rules_java//toolchains:all")

View file

@ -1,5 +0,0 @@
#!/bin/bash
# Create a job config for generating a random number
# $1 is the partition ref (output path)
echo "{\"outputs\":[\"$1\"],\"inputs\":[],\"args\":[\"$1\"],\"env\":{}}"

View file

@ -1,19 +0,0 @@
#!/bin/bash
# Generate a random number based on the partition ref
# $1 is the partition ref (output path)
# Create a hash of the partition ref to use as a seed
SEED=$(echo "$1" | md5sum | awk '{print $1}')
# Convert the hex hash to a decimal number (using the first 8 characters)
SEED_DEC=$((16#${SEED:0:8}))
# Set the random seed
RANDOM=$SEED_DEC
# Generate a random number
RANDOM_NUMBER=$RANDOM
# Write the random number to the output file
echo "Random number for partition $1: $RANDOM_NUMBER" > "$1"
echo "Generated random number $RANDOM_NUMBER for partition $1"