From e44b30e16133b2325c0b44427594fec41efddd1b Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 14 Apr 2025 23:12:17 +0530 Subject: [PATCH 01/25] Optimized Utils.name() to reduce number of String objects created --- .github/workflows/build.yml | 77 ++++++++++++------- pom.xml | 33 +++----- .../databuilderframework/engine/Utils.java | 6 +- .../controller/HomePageControllerTest.java | 2 +- 4 files changed, 67 insertions(+), 51 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 119c5e1..b797a73 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,36 +1,57 @@ -name: Build +name: Build & Generate JaCoCo Coverage Report + on: - push: - branches: - - master pull_request: - types: [opened, synchronize, reopened] + branches: [ main, master ] # Adjust branches as needed + +permissions: + # Required for checking out the code + contents: read + # Required for posting comments and status checks + pull-requests: write + # Required for reading report files + actions: read # Optional, often implicitly available + jobs: - build: - name: Build + build-and-report: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v2 + - name: Checkout code + uses: actions/checkout@v4 with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 11 - uses: actions/setup-java@v1 + fetch-depth: 0 + + - name: Set up JDK + uses: actions/setup-java@v4 with: - java-version: 11 - - name: Cache SonarCloud packages - uses: actions/cache@v1 + java-version: '8' # Or your project's Java version + distribution: 'temurin' # Or your preferred distribution + + - name: Build and Test with Maven + run: mvn clean verify --batch-mode # The 'verify' phase usually triggers the jacoco:report goal + + - name: Check for JaCoCo Report File + run: | + echo "Searching for JaCoCo reports..." + find ${{ github.workspace }} -name 'jacoco*.xml' # General search + echo "--- Listing Maven default ---" + ls -l ${{ github.workspace }}/target/site/jacoco/jacoco.xml || echo "Maven default not found" + # --- Coverage Reporting Step --- + - name: JaCoCo Report to PR Comment + id: jacoco + uses: madrapps/jacoco-report@v1.7.1 # Use the latest version with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - name: Cache Maven packages - uses: actions/cache@v1 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework + paths: | + ${{ github.workspace }}/**/target/site/jacoco/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 95 # Example value + min-coverage-changed-files: 95 # Example value + update-comment: true + title: "📊 JaCoCo Code Coverage" + + # Optional: Output coverage details + - name: Print Coverage Summary + run: | + echo "Overall Coverage: ${{ steps.jacoco.outputs.coverage-overall }}%" + echo "Changed Files Coverage: ${{ steps.jacoco.outputs.coverage-changed-files }}%" \ No newline at end of file diff --git a/pom.xml b/pom.xml index c1352f1..0e17ff6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.0 + 1.1.1-RC1 4.0.0 databuilderframework @@ -68,6 +68,11 @@ Vinay Varma vinay.varma@flipkart.com + + r0goyal + Rishabh Goyal + rgoyal2191@gmail.com + @@ -78,8 +83,7 @@ UTF-8 2.13.1 - 1.18.22 - 1.16.6.1 + 1.18.30 5.2.5.Final 4.13.2 1.2.10 @@ -136,22 +140,10 @@ - - org.projectlombok - lombok-maven-plugin - - - generate-sources - - delombok - - - - ${lombok.maven.version} - org.apache.maven.plugins maven-compiler-plugin + 3.8.1 1.8 1.8 @@ -160,24 +152,23 @@ org.jacoco jacoco-maven-plugin - 0.8.6 + 0.8.13 prepare-agent - report - test + verify report + + - - org.apache.maven.plugins diff --git a/src/main/java/io/appform/databuilderframework/engine/Utils.java b/src/main/java/io/appform/databuilderframework/engine/Utils.java index fad6d17..f5f0fb5 100644 --- a/src/main/java/io/appform/databuilderframework/engine/Utils.java +++ b/src/main/java/io/appform/databuilderframework/engine/Utils.java @@ -10,6 +10,7 @@ import io.appform.databuilderframework.model.DataBuilderMeta; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; +import java.util.concurrent.ConcurrentHashMap; import java.util.*; @@ -20,12 +21,15 @@ @Slf4j public final class Utils { + private final ConcurrentHashMap, String> CLASS_TO_NAME_MAPPING = new ConcurrentHashMap<>(); + public static String name(Object object) { return name(object.getClass()); } public static String name(Class clazz) { - return CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, clazz.getSimpleName()); + return CLASS_TO_NAME_MAPPING.computeIfAbsent(clazz, + aClass -> CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, clazz.getSimpleName())); } public static boolean isEmpty(Collection collection) { diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index dda7bd5..2730b79 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 100_000; i++) { + for(long i = 0; i < 10_000_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From 5533039c3a1f314a1617463ebe70319100861048 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 14 Apr 2025 23:31:29 +0530 Subject: [PATCH 02/25] Reduced number of iterations in HomePageControllerTest --- .../bloghomepagebuilder/controller/HomePageControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index 2730b79..dda7bd5 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 10_000_000; i++) { + for(long i = 0; i < 100_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From 8d0ec06684cbde9d473673f6f882f2dd14b9d080 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 00:08:36 +0530 Subject: [PATCH 03/25] Replaced String.format() with varargs --- .../engine/SimpleDataFlowExecutor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java index d01a56f..6c83f97 100644 --- a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java +++ b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java @@ -10,6 +10,7 @@ import java.util.HashSet; import java.util.Map; import java.util.TreeMap; +import java.util.function.Supplier; /** * The executor for a {@link io.appform.databuilderframework.model.DataFlow}. @@ -80,10 +81,9 @@ protected DataExecutionResponse run( dataSet.accessor().getAccesibleDataSetFor(builder))); if (null != response) { Preconditions.checkArgument(response.getData().equalsIgnoreCase(builderMeta.getProduces()), - String.format( - "Builder is supposed to produce %s but produces %s", - builderMeta.getProduces(), - response.getData())); + "Builder is supposed to produce %s but produces %s", + builderMeta.getProduces(), + response.getData()); dataSetAccessor.merge(response); responseData.put(response.getData(), response); response.setGeneratedBy(builderMeta.getName()); From 63e19fad4863cb8512ccbed76aa4fd4d21d3c58c Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 10:53:18 +0530 Subject: [PATCH 04/25] Reverted build.yml changes --- .github/workflows/build.yml | 40 +++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b797a73..cf92780 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,7 @@ -name: Build & Generate JaCoCo Coverage Report - +name: Build on: pull_request: - branches: [ main, master ] # Adjust branches as needed + branches: [ master ] # Adjust branches as needed permissions: # Required for checking out the code @@ -22,14 +21,31 @@ jobs: with: fetch-depth: 0 - - name: Set up JDK + - name: Set up JDK 11 uses: actions/setup-java@v4 with: - java-version: '8' # Or your project's Java version - distribution: 'temurin' # Or your preferred distribution + java-version: 11 # Or your project's Java version + distribution: temurin + + - name: Cache SonarCloud packages + uses: actions/cache@v1 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar - - name: Build and Test with Maven - run: mvn clean verify --batch-mode # The 'verify' phase usually triggers the jacoco:report goal + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework - name: Check for JaCoCo Report File run: | @@ -48,10 +64,4 @@ jobs: min-coverage-overall: 95 # Example value min-coverage-changed-files: 95 # Example value update-comment: true - title: "📊 JaCoCo Code Coverage" - - # Optional: Output coverage details - - name: Print Coverage Summary - run: | - echo "Overall Coverage: ${{ steps.jacoco.outputs.coverage-overall }}%" - echo "Changed Files Coverage: ${{ steps.jacoco.outputs.coverage-changed-files }}%" \ No newline at end of file + title: "📊 JaCoCo Code Coverage" \ No newline at end of file From b867a82623f219c19063844129325cbe0d4b20f2 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 10:55:43 +0530 Subject: [PATCH 05/25] Separated out jacoco coverage report task --- .github/workflows/build.yml | 50 +++++----------------- .github/workflows/jacoco-coverage.yml | 60 +++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/jacoco-coverage.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cf92780..10d2779 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,67 +1,37 @@ name: Build on: + push: + branches: + - master pull_request: - branches: [ master ] # Adjust branches as needed - -permissions: - # Required for checking out the code - contents: read - # Required for posting comments and status checks - pull-requests: write - # Required for reading report files - actions: read # Optional, often implicitly available - + types: [opened, synchronize, reopened] jobs: - build-and-report: + build: + name: Build runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: - fetch-depth: 0 - + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 11 uses: actions/setup-java@v4 with: - java-version: 11 # Or your project's Java version + java-version: 11 distribution: temurin - - name: Cache SonarCloud packages uses: actions/cache@v1 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - - name: Cache Maven packages uses: actions/cache@v1 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework - - - name: Check for JaCoCo Report File - run: | - echo "Searching for JaCoCo reports..." - find ${{ github.workspace }} -name 'jacoco*.xml' # General search - echo "--- Listing Maven default ---" - ls -l ${{ github.workspace }}/target/site/jacoco/jacoco.xml || echo "Maven default not found" - # --- Coverage Reporting Step --- - - name: JaCoCo Report to PR Comment - id: jacoco - uses: madrapps/jacoco-report@v1.7.1 # Use the latest version - with: - paths: | - ${{ github.workspace }}/**/target/site/jacoco/jacoco.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: 95 # Example value - min-coverage-changed-files: 95 # Example value - update-comment: true - title: "📊 JaCoCo Code Coverage" \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework \ No newline at end of file diff --git a/.github/workflows/jacoco-coverage.yml b/.github/workflows/jacoco-coverage.yml new file mode 100644 index 0000000..28f2a37 --- /dev/null +++ b/.github/workflows/jacoco-coverage.yml @@ -0,0 +1,60 @@ +name: JaCoCo Coverage +on: + pull_request: + branches: [ master ] # Adjust branches as needed + +permissions: + # Required for checking out the code + contents: read + # Required for posting comments and status checks + pull-requests: write + # Required for reading report files + actions: read # Optional, often implicitly available + +jobs: + build-and-report: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + java-version: 11 # Or your project's Java version + distribution: temurin + + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: mvn -B verify + + - name: Check for JaCoCo Report File + run: | + echo "Searching for JaCoCo reports..." + find ${{ github.workspace }} -name 'jacoco*.xml' # General search + echo "--- Listing Maven default ---" + ls -l ${{ github.workspace }}/target/site/jacoco/jacoco.xml || echo "Maven default not found" + # --- Coverage Reporting Step --- + - name: JaCoCo Report to PR Comment + id: jacoco + uses: madrapps/jacoco-report@v1.7.1 # Use the latest version + with: + paths: | + ${{ github.workspace }}/**/target/site/jacoco/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 95 # Example value + min-coverage-changed-files: 95 # Example value + update-comment: true + title: "📊 JaCoCo Code Coverage" \ No newline at end of file From 5bb6d1ad0b6b33d7c7abfa410e6f1ed2e9a55fd7 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 10:58:54 +0530 Subject: [PATCH 06/25] Made Map static --- .github/workflows/jacoco-coverage.yml | 7 ------- .../java/io/appform/databuilderframework/engine/Utils.java | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/jacoco-coverage.yml b/.github/workflows/jacoco-coverage.yml index 28f2a37..4b101e9 100644 --- a/.github/workflows/jacoco-coverage.yml +++ b/.github/workflows/jacoco-coverage.yml @@ -27,13 +27,6 @@ jobs: java-version: 11 # Or your project's Java version distribution: temurin - - name: Cache Maven packages - uses: actions/cache@v1 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any diff --git a/src/main/java/io/appform/databuilderframework/engine/Utils.java b/src/main/java/io/appform/databuilderframework/engine/Utils.java index f5f0fb5..e8f96e7 100644 --- a/src/main/java/io/appform/databuilderframework/engine/Utils.java +++ b/src/main/java/io/appform/databuilderframework/engine/Utils.java @@ -21,7 +21,7 @@ @Slf4j public final class Utils { - private final ConcurrentHashMap, String> CLASS_TO_NAME_MAPPING = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap, String> CLASS_TO_NAME_MAPPING = new ConcurrentHashMap<>(); public static String name(Object object) { return name(object.getClass()); From 84b63672c7332556e14b8eee52f11267368d9760 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 11:13:04 +0530 Subject: [PATCH 07/25] Upgraded cache action version since v1 is now removed --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 10d2779..9ab7f62 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,13 +19,13 @@ jobs: java-version: 11 distribution: temurin - name: Cache SonarCloud packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} From f32c9015b964b566b125a849c498130eeb65b1fd Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 11:20:03 +0530 Subject: [PATCH 08/25] Dummy From 049b24b8ab3b5dabc01509ea2918e7b9fc7d3220 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 11:44:53 +0530 Subject: [PATCH 09/25] Optimized trace log line --- .../databuilderframework/engine/SimpleDataFlowExecutor.java | 2 +- .../bloghomepagebuilder/controller/HomePageControllerTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java index 6c83f97..603d106 100644 --- a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java +++ b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java @@ -93,7 +93,7 @@ protected DataExecutionResponse run( newlyGeneratedData.add(response.getData()); } } - log.trace("Ran " + builderMeta.getName()); + log.trace("Ran {}", builderMeta.getName()); processedBuilders.add(builderMeta); for (DataBuilderExecutionListener listener : dataBuilderExecutionListener) { try { diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index dda7bd5..04214ee 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 100_000; i++) { + for(long i = 0; i < 10000_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From b1c2724dc3b4ace723e4ae10f4d501fa7471eb02 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 11:57:04 +0530 Subject: [PATCH 10/25] Changed String.format() everywhere --- .../io/appform/databuilderframework/engine/BuilderRunner.java | 4 ++-- .../appform/databuilderframework/engine/DataSetAccessor.java | 4 ++-- .../engine/MultiThreadedDataFlowExecutor.java | 3 +-- .../engine/OptimizedMultiThreadedDataFlowExecutor.java | 3 +-- .../controller/HomePageControllerTest.java | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/BuilderRunner.java b/src/main/java/io/appform/databuilderframework/engine/BuilderRunner.java index 2cad6f4..ed8464e 100644 --- a/src/main/java/io/appform/databuilderframework/engine/BuilderRunner.java +++ b/src/main/java/io/appform/databuilderframework/engine/BuilderRunner.java @@ -76,8 +76,8 @@ public DataContainer call() throws Exception { executePostListenersSuccess(response); if (null != response) { Preconditions.checkArgument(response.getData().equalsIgnoreCase(builderMeta.getProduces()), - String.format("Builder is supposed to produce %s but produces %s", - builderMeta.getProduces(), response.getData())); + "Builder is supposed to produce %s but produces %s", + builderMeta.getProduces(), response.getData()); response.setGeneratedBy(builderMeta.getName()); } return new DataContainer(builderMeta, response); diff --git a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java index 04968dc..10c29ca 100644 --- a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java +++ b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java @@ -53,9 +53,9 @@ public T get(String key, Class tClass) { */ public T getAccessibleData(String key, B builder, Class tClass) { Preconditions.checkArgument(!builder.getDataBuilderMeta().getAccessibleDataSet().contains(key), - String.format("Builder %s can access only %s", + "Builder %s can access only %s", builder.getDataBuilderMeta().getName(), - builder.getDataBuilderMeta().getConsumes())); + builder.getDataBuilderMeta().getConsumes()); return get(key, tClass); } diff --git a/src/main/java/io/appform/databuilderframework/engine/MultiThreadedDataFlowExecutor.java b/src/main/java/io/appform/databuilderframework/engine/MultiThreadedDataFlowExecutor.java index 0020651..ade2e44 100644 --- a/src/main/java/io/appform/databuilderframework/engine/MultiThreadedDataFlowExecutor.java +++ b/src/main/java/io/appform/databuilderframework/engine/MultiThreadedDataFlowExecutor.java @@ -86,10 +86,9 @@ protected DataExecutionResponse run( } if (null != response) { Preconditions.checkArgument(response.getData().equalsIgnoreCase(data), - String.format( "Builder is supposed to produce %s but produces %s", data, - response.getData())); + response.getData()); dataSetAccessor.merge(response); responseData.put(response.getData(), response); activeDataSet.add(response.getData()); diff --git a/src/main/java/io/appform/databuilderframework/engine/OptimizedMultiThreadedDataFlowExecutor.java b/src/main/java/io/appform/databuilderframework/engine/OptimizedMultiThreadedDataFlowExecutor.java index b77c639..b89dcff 100644 --- a/src/main/java/io/appform/databuilderframework/engine/OptimizedMultiThreadedDataFlowExecutor.java +++ b/src/main/java/io/appform/databuilderframework/engine/OptimizedMultiThreadedDataFlowExecutor.java @@ -114,10 +114,9 @@ protected DataExecutionResponse run( } if (null != response) { Preconditions.checkArgument(response.getData().equalsIgnoreCase(data), - String.format( "Builder is supposed to produce %s but produces %s", data, - response.getData())); + response.getData()); dataSetAccessor.merge(response); responseData.put(response.getData(), response); activeDataSet.add(response.getData()); diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index 04214ee..dda7bd5 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 10000_000; i++) { + for(long i = 0; i < 100_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From 2424d6d53085212a726d2ce5c153ba6927b20a81 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Tue, 15 Apr 2025 12:15:58 +0530 Subject: [PATCH 11/25] Changed Collections.synchronizedSet() to normal HashSet<>() --- .../databuilderframework/engine/SimpleDataFlowExecutor.java | 2 +- .../engine/impl/MixedDataBuilderFactory.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java index 603d106..bd61382 100644 --- a/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java +++ b/src/main/java/io/appform/databuilderframework/engine/SimpleDataFlowExecutor.java @@ -43,7 +43,7 @@ protected DataExecutionResponse run( val activeDataSet = new HashSet(); val dependencyHierarchy = executionGraph.getDependencyHierarchy(); val newlyGeneratedData = new HashSet(); - val processedBuilders = Collections.synchronizedSet(new HashSet()); + val processedBuilders = new HashSet(); dataSetAccessor.merge(dataDelta); dataDelta.getDelta().forEach(data -> activeDataSet.add(data.getData())); diff --git a/src/main/java/io/appform/databuilderframework/engine/impl/MixedDataBuilderFactory.java b/src/main/java/io/appform/databuilderframework/engine/impl/MixedDataBuilderFactory.java index 1407aaa..56a6c29 100644 --- a/src/main/java/io/appform/databuilderframework/engine/impl/MixedDataBuilderFactory.java +++ b/src/main/java/io/appform/databuilderframework/engine/impl/MixedDataBuilderFactory.java @@ -42,8 +42,9 @@ public void register(DataBuilder dataBuilder) { public DataBuilder create(DataBuilderMeta dataBuilderMeta) throws DataBuilderFrameworkException { val builderName = dataBuilderMeta.getName(); - if (builderInstances.containsKey(builderName)) { - return builderInstances.get(builderName); + val builderInstance = builderInstances.get(builderName); + if (builderInstance != null) { + return builderInstance; } val dataBuilderClass = dataBuilderMetadataManager.getDataBuilderClass(builderName); if (null == dataBuilderClass) { From e81cc7ad1eb45dd9d0fc660a3246635e387c47f8 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Wed, 16 Apr 2025 12:47:08 +0530 Subject: [PATCH 12/25] Changed ConcurrentHashMap to Map in definition. Moved to release version --- pom.xml | 2 +- src/main/java/io/appform/databuilderframework/engine/Utils.java | 2 +- .../bloghomepagebuilder/controller/HomePageControllerTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0e17ff6..d17ff79 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.1-RC1 + 1.1.1 4.0.0 databuilderframework diff --git a/src/main/java/io/appform/databuilderframework/engine/Utils.java b/src/main/java/io/appform/databuilderframework/engine/Utils.java index e8f96e7..68beff0 100644 --- a/src/main/java/io/appform/databuilderframework/engine/Utils.java +++ b/src/main/java/io/appform/databuilderframework/engine/Utils.java @@ -21,7 +21,7 @@ @Slf4j public final class Utils { - private static final ConcurrentHashMap, String> CLASS_TO_NAME_MAPPING = new ConcurrentHashMap<>(); + private static final Map, String> CLASS_TO_NAME_MAPPING = new ConcurrentHashMap<>(); public static String name(Object object) { return name(object.getClass()); diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index dda7bd5..04214ee 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 100_000; i++) { + for(long i = 0; i < 10000_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From 5a72d4c1a1d5f6b58440c4a595844c1cbe4da2d4 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 17 Apr 2025 13:45:50 +0530 Subject: [PATCH 13/25] Added method to remove from DataSet --- pom.xml | 2 +- .../engine/DataSetAccessor.java | 14 +++++++++----- .../databuilderframework/model/DataSet.java | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index d17ff79..b6d4f72 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.1 + 1.1.1-RC1-SNAPSHOT 4.0.0 databuilderframework diff --git a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java index 10c29ca..9e805aa 100644 --- a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java +++ b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java @@ -37,8 +37,8 @@ public T get(Class tClass) { public T get(String key, Class tClass) { val data = dataSet.get(key); return null == data - ? null - : tClass.cast(data); + ? null + : tClass.cast(data); } /** @@ -53,9 +53,9 @@ public T get(String key, Class tClass) { */ public T getAccessibleData(String key, B builder, Class tClass) { Preconditions.checkArgument(!builder.getDataBuilderMeta().getAccessibleDataSet().contains(key), - "Builder %s can access only %s", - builder.getDataBuilderMeta().getName(), - builder.getDataBuilderMeta().getConsumes()); + "Builder %s can access only %s", + builder.getDataBuilderMeta().getName(), + builder.getDataBuilderMeta().getConsumes()); return get(key, tClass); } @@ -120,6 +120,10 @@ public boolean checkForData(Class clazz) { return checkForData(Utils.name(clazz)); } + public Set keySet() { + return dataSet.keySet(); + } + /** * Get a copy of the underlying data set. */ diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 26b6768..874d6fd 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -49,6 +49,17 @@ public DataSet add(String dataName, Data data) { } } + public DataSet remove(String dataName) { + val stamp = lock.writeLock(); + try { + this.availableData.remove(dataName); + return this; + } + finally { + lock.unlockWrite(stamp); + } + } + public DataSet add(final Collection data) { val stamp = lock.writeLock(); try { @@ -118,4 +129,8 @@ private T safeOp(Supplier operation) { lock.unlockRead(stamp); } } + + public Set keySet() { + return availableData.keySet(); + } } From 72ed696c71f108f331142a8ded754ba9bf9ac0a1 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 17 Apr 2025 13:54:07 +0530 Subject: [PATCH 14/25] Moved all write operations through a single lock method --- .../databuilderframework/model/DataSet.java | 44 +++++++++---------- .../controller/HomePageControllerTest.java | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 874d6fd..248af0a 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -39,36 +39,24 @@ public DataSet(Map availableData) { } public DataSet add(String dataName, Data data) { - val stamp = lock.writeLock(); - try { - this.availableData.put(dataName, data); - return this; - } - finally { - lock.unlockWrite(stamp); - } + return safeWriteOp(() -> { + availableData.put(dataName, data); + return DataSet.this; + }); } public DataSet remove(String dataName) { - val stamp = lock.writeLock(); - try { - this.availableData.remove(dataName); - return this; - } - finally { - lock.unlockWrite(stamp); - } + return safeWriteOp(() -> { + availableData.remove(dataName); + return DataSet.this; + }); } public DataSet add(final Collection data) { - val stamp = lock.writeLock(); - try { + return safeWriteOp(() -> { data.forEach(d -> availableData.put(d.getData(), d)); - return this; - } - finally { - lock.unlockWrite(stamp); - } + return DataSet.this; + }); } public DataSet add(T data) { @@ -130,6 +118,16 @@ private T safeOp(Supplier operation) { } } + private T safeWriteOp(Supplier operation) { + val stamp = lock.writeLock(); + try { + return operation.get(); + } + finally { + lock.unlockWrite(stamp); + } + } + public Set keySet() { return availableData.keySet(); } diff --git a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java index 04214ee..dda7bd5 100644 --- a/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java +++ b/src/test/java/examples/bloghomepagebuilder/controller/HomePageControllerTest.java @@ -52,7 +52,7 @@ public void testHomePageMTOpt() throws Exception { private void runHomePageTest(DataFlowExecutor executor) throws Exception { val request = new HomePageRequest("2321312312", "2323454", "Blah".getBytes()); val stopwatch = Stopwatch.createStarted(); - for(long i = 0; i < 10000_000; i++) { + for(long i = 0; i < 100_000; i++) { HomePageResponse response = executor.run(homePageDataFlow, request).get(HomePageResponse.class); Assert.assertNotNull(response); //System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(response)); From 3be93c579698e37c1e91d470327b0fb11995915b Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 17 Apr 2025 18:05:32 +0530 Subject: [PATCH 15/25] Added method to remove data from DataSet --- .../io/appform/databuilderframework/model/DataSet.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 248af0a..69d2681 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -52,6 +52,13 @@ public DataSet remove(String dataName) { }); } + public DataSet remove(Class dataClass) { + return safeWriteOp(() -> { + availableData.remove(Utils.name(dataClass)); + return DataSet.this; + }); + } + public DataSet add(final Collection data) { return safeWriteOp(() -> { data.forEach(d -> availableData.put(d.getData(), d)); From e4384791411353feab8234ba2fa739c3dfc5abe1 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 17 Apr 2025 18:05:50 +0530 Subject: [PATCH 16/25] Moved to release version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b6d4f72..d17ff79 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.1-RC1-SNAPSHOT + 1.1.1 4.0.0 databuilderframework From f187eebf9c24b2993ff9864c7ff9a58f9a8f2d69 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 16:17:09 +0530 Subject: [PATCH 17/25] Fixed node ranking --- pom.xml | 2 +- .../engine/ExecutionGraphGenerator.java | 4 +++- .../java/io/appform/databuilderframework/model/DataSet.java | 6 +++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d17ff79..b6d4f72 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.1 + 1.1.1-RC1-SNAPSHOT 4.0.0 databuilderframework diff --git a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java index 09d538b..22d4434 100644 --- a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java +++ b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java @@ -133,11 +133,13 @@ private int rankNodes(DependencyNode root, int currentNode, Set processe } val childNode = currentNode + 1; - return root.getIncoming() + val ret = root.getIncoming() .stream() .mapToInt(child -> Math.max(rankNodes(child, childNode, processedNodes), childNode)) .max() .orElse(childNode); + processedNodes.add(data); + return ret; } private DependencyNode generateDependencyTree( diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 69d2681..bb180bb 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -6,6 +6,8 @@ import com.google.common.collect.Maps; import io.appform.databuilderframework.engine.DataSetAccessor; import io.appform.databuilderframework.engine.Utils; +import lombok.Getter; +import lombok.Setter; import lombok.val; import org.hibernate.validator.constraints.NotEmpty; @@ -26,7 +28,9 @@ public class DataSet { @NotNull @NotEmpty @JsonProperty - private final Map availableData; + @Getter + @Setter + private Map availableData; private final StampedLock lock = new StampedLock(); From 46ade13cad26c2e979bd478e86c362298da08e33 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:08:10 +0530 Subject: [PATCH 18/25] Fixed ranking infinite loop issue --- .github/workflows/build.yml | 9 +++++---- pom.xml | 7 ++++--- .../engine/ExecutionGraphGenerator.java | 4 +++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 119c5e1..5f58b86 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,21 +10,22 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 11 - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: 11 + distribution: temurin - name: Cache SonarCloud packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} diff --git a/pom.xml b/pom.xml index c1352f1..f12b6b7 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ UTF-8 2.13.1 - 1.18.22 + 1.18.30 1.16.6.1 5.2.5.Final 4.13.2 @@ -152,6 +152,7 @@ org.apache.maven.plugins maven-compiler-plugin + 3.8.1 1.8 1.8 @@ -160,7 +161,7 @@ org.jacoco jacoco-maven-plugin - 0.8.6 + 0.8.13 @@ -170,7 +171,7 @@ report - test + verify report diff --git a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java index 09d538b..22d4434 100644 --- a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java +++ b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java @@ -133,11 +133,13 @@ private int rankNodes(DependencyNode root, int currentNode, Set processe } val childNode = currentNode + 1; - return root.getIncoming() + val ret = root.getIncoming() .stream() .mapToInt(child -> Math.max(rankNodes(child, childNode, processedNodes), childNode)) .max() .orElse(childNode); + processedNodes.add(data); + return ret; } private DependencyNode generateDependencyTree( From b874747742017a908a2e97dce79c287dfc33c557 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:17:45 +0530 Subject: [PATCH 19/25] Disabled sonar for testing purposes --- .github/workflows/build.yml | 10 +++++----- pom.xml | 5 +++++ .../engine/ExecutionGraphGenerator.java | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5f58b86..aaa6818 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,8 +30,8 @@ jobs: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework +# - name: Build and analyze +# env: +# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any +# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} +# run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework diff --git a/pom.xml b/pom.xml index f12b6b7..8c69bc2 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,11 @@ + + org.sonarsource.scanner.maven + sonar-maven-plugin + 5.1.0.4751 + org.projectlombok lombok-maven-plugin diff --git a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java index 22d4434..e171a1e 100644 --- a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java +++ b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java @@ -143,7 +143,7 @@ private int rankNodes(DependencyNode root, int currentNode, Set processe } private DependencyNode generateDependencyTree( - final String data, DataFlow dataFlow, + final String data, DataFlow dataFlow,m DependencyInfo outgoing, DependencyNodeManager dependencyNodeManager, DependencyInfoManager dependencyInfoManager, From cd57ccf6ce27a9c93f8ceee81adec42597ae3ab1 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:19:15 +0530 Subject: [PATCH 20/25] Disabled sonar for testing purposes --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aaa6818..33561fb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,8 +30,8 @@ jobs: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 -# - name: Build and analyze -# env: -# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any -# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} -# run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: mvn -B verify From 515aef4608927431eb2c32d7b682cafbb0089126 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:19:58 +0530 Subject: [PATCH 21/25] Disabled sonar for testing purposes --- .../databuilderframework/engine/ExecutionGraphGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java index e171a1e..22d4434 100644 --- a/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java +++ b/src/main/java/io/appform/databuilderframework/engine/ExecutionGraphGenerator.java @@ -143,7 +143,7 @@ private int rankNodes(DependencyNode root, int currentNode, Set processe } private DependencyNode generateDependencyTree( - final String data, DataFlow dataFlow,m + final String data, DataFlow dataFlow, DependencyInfo outgoing, DependencyNodeManager dependencyNodeManager, DependencyInfoManager dependencyInfoManager, From 2e3fb20d0cca2c277b3f030ddcf34d553c97189b Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:23:41 +0530 Subject: [PATCH 22/25] Slight changes in jacoco plugin --- pom.xml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 8c69bc2..20a1c90 100644 --- a/pom.xml +++ b/pom.xml @@ -141,19 +141,6 @@ sonar-maven-plugin 5.1.0.4751 - - org.projectlombok - lombok-maven-plugin - - - generate-sources - - delombok - - - - ${lombok.maven.version} - org.apache.maven.plugins maven-compiler-plugin @@ -169,17 +156,21 @@ 0.8.13 + prepare-agent prepare-agent - report - verify report + + + XML + + From 7a9fd2c0626f8c2ce0be0fc70d92c93a4356e85a Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 18 Apr 2025 21:25:57 +0530 Subject: [PATCH 23/25] Slight changes in jacoco plugin --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 33561fb..398e438 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,4 +34,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar From 7c9680b6d50fafa738c30480ca0993c9aa54111b Mon Sep 17 00:00:00 2001 From: Santanu Date: Sat, 19 Apr 2025 11:31:02 +0530 Subject: [PATCH 24/25] Update build.yml --- .github/workflows/build.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 398e438..e5079d1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build +name: SonarQube on: push: branches: @@ -7,18 +7,18 @@ on: types: [opened, synchronize, reopened] jobs: build: - name: Build + name: Build and analyze runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: - java-version: 11 - distribution: temurin - - name: Cache SonarCloud packages + java-version: 17 + distribution: 'zulu' # Alternative distribution options are available. + - name: Cache SonarQube packages uses: actions/cache@v4 with: path: ~/.sonar/cache @@ -32,6 +32,5 @@ jobs: restore-keys: ${{ runner.os }}-m2 - name: Build and analyze env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=appform-io_databuilderframework From 2fd9332daf25c5b70e18674cc7536ebca0ef4e57 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Sat, 19 Apr 2025 13:52:08 +0530 Subject: [PATCH 25/25] Removed unnecessary method --- .../engine/DataSetAccessor.java | 4 ---- .../databuilderframework/model/DataSet.java | 22 +------------------ 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java index 9e805aa..6da8a55 100644 --- a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java +++ b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java @@ -120,10 +120,6 @@ public boolean checkForData(Class clazz) { return checkForData(Utils.name(clazz)); } - public Set keySet() { - return dataSet.keySet(); - } - /** * Get a copy of the underlying data set. */ diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index bb180bb..1ce200a 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -28,9 +28,7 @@ public class DataSet { @NotNull @NotEmpty @JsonProperty - @Getter - @Setter - private Map availableData; + private final Map availableData; private final StampedLock lock = new StampedLock(); @@ -49,20 +47,6 @@ public DataSet add(String dataName, Data data) { }); } - public DataSet remove(String dataName) { - return safeWriteOp(() -> { - availableData.remove(dataName); - return DataSet.this; - }); - } - - public DataSet remove(Class dataClass) { - return safeWriteOp(() -> { - availableData.remove(Utils.name(dataClass)); - return DataSet.this; - }); - } - public DataSet add(final Collection data) { return safeWriteOp(() -> { data.forEach(d -> availableData.put(d.getData(), d)); @@ -138,8 +122,4 @@ private T safeWriteOp(Supplier operation) { lock.unlockWrite(stamp); } } - - public Set keySet() { - return availableData.keySet(); - } }