{
  "_class" : "hudson.maven.MavenModuleSetBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 131,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
            "branch" : [
              {
                "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
            "branch" : [
              {
                "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
        "branch" : [
          {
            "SHA1" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/bxservice/idempiere-rest"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      "_class" : "hudson.maven.reporters.MavenAggregatedArtifactRecord"
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#131",
  "duration" : 23480,
  "estimatedDuration" : 23033,
  "executor" : null,
  "fullDisplayName" : "idempiere-rest-master #131",
  "id" : "131",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 131,
  "queueId" : 5791,
  "result" : "FAILURE",
  "timestamp" : 1790822646331,
  "url" : "https://jenkins.younex.de/job/idempiere-rest-master/131/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "com.trekglobal.idempiere.rest.api.test/src/com/trekglobal/idempiere/rest/api/webhook/test/WebhookRetryPendingTest.java",
          "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/process/WebhookRetryProcessor.java",
          "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/model/MRestWebhookOutLog.java"
        ],
        "commitId" : "19880d6384f91804143872262e0670d9272121d0",
        "timestamp" : 1790768942000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "fix(webhook): bound WebhookRetryProcessor memory with batches, skip paused endpoints (#538)\u000a\u000a* fix(webhook): bound WebhookRetryProcessor memory with batches, skip paused endpoints\u000a\u000aFixes bxservice/idempiere-rest#537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a* test(webhook): cover getPendingRetries batching and paused-endpoint exclusion\u000a\u000aRefs bxservice/idempiere-rest#537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a* fix(webhook): enforce retry runtime limit per delivery, not per batch\u000a\u000aRefs bxservice/idempiere-rest#537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a* refactor(webhook): use Query.iterate() for pending retries instead of keyset batches\u000a\u000aRefs bxservice/idempiere-rest#537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a* perf(webhook): stream pending retries to avoid N+1 row loads\u000a\u000aQuery.iterate() loads IDs up front and re-fetches each row with a separate\u000aSELECT, which means one query per delivery on a backlog of millions.\u000aSwitch to Query.stream() so each delivery is built straight off the open\u000aresult set, and re-run the query per batch of COMMIT_INTERVAL so commits\u000anever happen while the cursor is open. Processed rows leave the WHERE\u000aclause, so each fresh batch continues where the previous one stopped.\u000a\u000aRefs #537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a* fix(webhook): cap pending-retry query with SQL LIMIT per batch\u000a\u000aQuery.stream() sets no fetch size, so pgJDBC buffers the whole result set\u000abefore the first row is read; stopping after COMMIT_INTERVAL rows in Java\u000astill loaded the entire backlog. Pass the batch size into\u000astreamPendingRetries and apply it via setPageSize, so each query returns\u000aat most one batch. No OFFSET is needed since processed rows leave the\u000aWHERE clause.\u000a\u000aAlso check the runtime deadline before opening each batch query.\u000a\u000aRefs #537\u000a\u000aCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a\u000a---------\u000a\u000aCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a",
        "date" : "2026-09-30 13:49:02 +0200",
        "id" : "19880d6384f91804143872262e0670d9272121d0",
        "msg" : "fix(webhook): bound WebhookRetryProcessor memory with batches, skip paused endpoints (#538)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/model/MRestWebhookOutLog.java"
          },
          {
            "editType" : "add",
            "file" : "com.trekglobal.idempiere.rest.api.test/src/com/trekglobal/idempiere/rest/api/webhook/test/WebhookRetryPendingTest.java"
          },
          {
            "editType" : "edit",
            "file" : "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/process/WebhookRetryProcessor.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/json/expand/ExpandParser.java"
        ],
        "commitId" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
        "timestamp" : 1790769093000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/noreply",
          "fullName" : "noreply"
        },
        "authorEmail" : "noreply@github.com",
        "comment" : "fix(expand): normalize detail table name to AD_Table.TableName before model class lookup (#539) (#540)\u000a\u000aExpandParser took the detail table name from the raw $expand text and\u000apassed it to MTable.getClass(), which derives a Java class name from that\u000aexact string and is case-sensitive. The child records themselves load\u000afine because MTable.get and Query resolve the table case-insensitively.\u000a\u000aOn a case-insensitive filesystem with exploded-directory bundles (an\u000aEclipse PDE launch on macOS or Windows), the wrong-case class file is\u000afound on disk and rejected with \"NoClassDefFoundError: ... (wrong name:\u000a...)\", a LinkageError that escapes catch (Exception ex) and surfaces as\u000aa bare 500. On a case-sensitive filesystem, or from a JAR bundle, the\u000alookup misses and returns null instead.\u000a\u000aNormalize to AD_Table.TableName right after the detail table name is\u000aresolved, matching what #533 did for ModelResourceImpl.\u000a\u000aNo behaviour change for callers already using the canonical casing.\u000a\u000aFixes #539\u000aRefs #532\u000a\u000aCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\u000a",
        "date" : "2026-09-30 13:51:33 +0200",
        "id" : "e513da6ed88a535bc060b191da0d45a350aa3fe0",
        "msg" : "fix(expand): normalize detail table name to AD_Table.TableName before model class lookup (#539) (#540)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/json/expand/ExpandParser.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/noreply",
      "fullName" : "noreply"
    }
  ],
  "mavenArtifacts" : {
    
  },
  "mavenVersionUsed" : "3.9.6"
}