{
  "_class" : "hudson.matrix.MatrixBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "org.jenkinsci.plugins.ghprb.GhprbCause",
          "shortDescription" : "GitHub pull request #2989 of commit d7c82aed9f048ec69c4eae6459b9411819a25339, no merge conflicts."
        }
      ]
    },
    {
      "_class" : "org.jenkinsci.plugins.ghprb.GhprbParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "sha1",
          "value" : "origin/pr/2989/merge"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbActualCommit",
          "value" : "d7c82aed9f048ec69c4eae6459b9411819a25339"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbActualCommitAuthor",
          "value" : ""
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbActualCommitAuthorEmail",
          "value" : ""
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbAuthorRepoGitUrl",
          "value" : "https://github.com/willfindlay/bcc.git"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbTriggerAuthor",
          "value" : ""
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbTriggerAuthorEmail",
          "value" : ""
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbTriggerAuthorLogin",
          "value" : "yonghong-song"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbTriggerAuthorLoginMention",
          "value" : "@yonghong-song"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullId",
          "value" : "2989"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbTargetBranch",
          "value" : "master"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbSourceBranch",
          "value" : "ringbuf_helpers"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "GIT_BRANCH",
          "value" : "ringbuf_helpers"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullAuthorEmail",
          "value" : "william@williamfindlay.com"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullAuthorLogin",
          "value" : "willfindlay"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullAuthorLoginMention",
          "value" : "@willfindlay"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullDescription",
          "value" : "GitHub pull request #2989 of commit d7c82aed9f048ec69c4eae6459b9411819a25339, no merge conflicts."
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullTitle",
          "value" : "Ringbuf Support for Python API"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullLink",
          "value" : "https://github.com/iovisor/bcc/pull/2989"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbPullLongDescription",
          "value" : "This pull request contains an implementation for ringbuf support in bcc's Python API. \\r\\n\\r\\nFixes #2985.\\r\\n\\r\\n## Summary of Changes\\r\\n\\r\\n- Added ringbuf helpers from libbpf API to libbcc\\r\\n- Added a new `RingBuf` class to represent the ringbuf map\\r\\n- Added a new `EventArrayBase` class to reduce code duplication between PerfEventArray and RingBuf\\r\\n- Added `BPF_RINGBUF_OUTPUT` macro for BPF programs\\r\\n- Added documentation\\r\\n\\r\\n## Examples\\r\\n\\r\\nThe following example programs describe how the API works.\\r\\n\\r\\nOn the BPF side, we have two choices for submitting events. `map.ringbuf_output` works like `map.perf_submit` for perf buffers,\\r\\nwhile `map.ringbuf_reserve`/`map.ringbuf_discard`/`map.ringbuf_submit` present an alternative approach that allows for finer control.\\r\\n\\r\\n`map.ringbuf_output` works like:\\r\\n```c\\r\\nBPF_RINGBUF_OUTPUT(events);\\r\\n\\r\\nstruct data_t data {\\r\\n    u32 pid;\\r\\n};\\r\\n\\r\\nTRACEPOINT_PROBE(raw_syscalls, sys_enter) {\\r\\n    u32 pid = bpf_get_current_pid_tgid();\\r\\n\\r\\n    struct data_t data = { .pid = pid };\\r\\n\\r\\n    events.ringbuf_output(&data, sizeof(data), 0 /* flags */);\\r\\n    \\r\\n    return 0;\\r\\n}\\r\\n```\\r\\n\\r\\n`map.ringbuf_reserve`/`map.ringbuf_discard`/`map.ringbuf_submit` work like:\\r\\n```c\\r\\nBPF_RINGBUF_OUTPUT(events);\\r\\n\\r\\nstruct data_t data {\\r\\n    u32 pid;\\r\\n};\\r\\n\\r\\nTRACEPOINT_PROBE(raw_syscalls, sys_enter) {\\r\\n    u32 pid = bpf_get_current_pid_tgid();\\r\\n\\r\\n    struct data_t *data = events.ringbuf_reserve(sizeof(struct data_t));\\r\\n    if (!data)\\r\\n        return 1;\\r\\n\\r\\n    data->pid = pid;\\r\\n\\r\\n    events.ringbuf_submit(data, 0 /* flags */);\\r\\n    // or, to discard the data...\\r\\n    events.ringbuf_discard(data, 0 /* flags */);\\r\\n\\r\\n    return 0;\\r\\n}\\r\\n```\\r\\n\\r\\nOn the Python side, the user calls `open_ring_buffer` to associate a callback with the buffer. There are two options for reading data from kernelspace: `ring_buffer_poll` which works like `perf_buffer_poll` and `ring_buffer_consume` which reads data without polling first.\\r\\n```python\\r\\nimport time\\r\\n\\r\\nfrom bcc import BPF\\r\\n\\r\\nb = BPF(src_file=b'source.c')\\r\\n\\r\\ndef callback(ctx, data, size):\\r\\n    event = b['events'].event(data)\\r\\n    print(event.pid)\\r\\n\\r\\nb['events'].open_ring_buffer(callback)\\r\\n\\r\\nwhile True:\\r\\n    # Option 1...\\r\\n    b.ring_buffer_poll(30)\\r\\n    # Option 2...\\r\\n    b.ring_buffer_consume()\\r\\n    time.sleep(0.5)\\r\\n```\\r\\n\\r\\nUnlike perf buffer callbacks, ringbuf supports return values from the callback, which can be used to indicate error conditions to stop polling early. If a callback does not return an integer, we fall back to returning 0, which approximates perf buffer behavior."
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbCommentBody",
          "value" : "[buildbot, test this please]"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbGhRepository",
          "value" : "iovisor/bcc"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "ghprbCredentialsId",
          "value" : "6d3daf13-69b8-48b1-9c8f-ec5353264113"
        }
      ]
    },
    {
      "_class" : "hudson.plugins.git.GitTagAction"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : "<a title=\"Ringbuf Support for Python API\" href=\"https://github.com/iovisor/bcc/pull/2989\">PR #2989</a>: Ringbuf Support for Python API",
  "displayName" : "#576",
  "duration" : 1283963,
  "estimatedDuration" : 7460664,
  "executor" : None,
  "fullDisplayName" : "bcc-pr #576",
  "id" : "576",
  "keepLog" : False,
  "number" : 576,
  "queueId" : 4616,
  "result" : "SUCCESS",
  "timestamp" : 1593116308002,
  "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/576/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      
    ],
    "kind" : "git"
  },
  "culprits" : [
    
  ],
  "runs" : [
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=fc25/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=fc26/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=fc27/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=fc28/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=ubuntu1604/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=ubuntu1710/576/"
    },
    {
      "number" : 576,
      "url" : "https://buildbot.iovisor.org/jenkins/user/jmarchan/my-views/view/all/job/bcc-pr/label=ubuntu1804/576/"
    }
  ]
}