Skip to content

Conversation

@cqhasy
Copy link

@cqhasy cqhasy commented Sep 26, 2025

  • If this pull request closes/resolves/fixes an existing issue, replace the issue number. Closes #.
  • Update the CHANGES log.

@wu-sheng
Copy link
Member

Please run the CI locally. I noticed you are using the upstream resources and the maintainer's manual approval to test. This is not efficiency. Please set up the environment locally and make sure they are passed locally.

config: test/e2e-v2/cases/profiling/trace/opensearch/e2e.yaml
env: OPENSEARCH_VERSION=2.4.0

- name: Go Profiling
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: Go Profiling
- name: Go Trace Profiling

env: OPENSEARCH_VERSION=2.4.0

- name: Go Profiling
config: test/e2e-v2/cases/go/profiling-cases.yaml
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move this into test/e2e-v2/profiling/trace/go folder.

with:
e2e-file: $GITHUB_WORKSPACE/test/e2e-v2/cases/simple/jdk/e2e.yaml

# e2e-test-banyandb-stages:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why you need to change it?

.licenserc.yaml Outdated
- '**/mockito-extensions/**'
- 'oap-server/server-library/library-async-profiler-jfr-parser'
- 'docs/en/changes/changes.tpl'
- 'oap-server/server-core/src/main/proto/profile.proto'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should not have this file.

@ElasticSearch.EnableDocValues
@Column(name = IS_GO)
@BanyanDB.NoIndexing
private int isGo; // store as 0/1 for storage compatibility
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@please change the field name as language type.

* Analyze a pprof profile for a specific segment and time window.
* periodMs: derived from pprof period/periodType; fallback to 10ms when absent.
*/
public ProfileAnalyzation analyze(final String segmentId,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this already done in the proof library?

<version>${project.version}</version>
</dependency>
<!-- Protobuf runtime for generated classes in this module -->
<dependency>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import the pprof library is enough.

- e2e
expose:
- 8080
ports:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why you need to define this? Please remove it encase its works for the debug.

- id: "{{ notEmpty .id }}"
parentid: "{{ notEmpty .parentid }}"
codesignature: "test.apache.skywalking.e2e.profile.ProfileController.createAuthor:-1"
codesignature: "{{ notEmpty .codesignature }}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why you need to update this?


tip: null
trees:
{{- if .trees }}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please rollback to the original one.

@cqhasy cqhasy closed this Oct 27, 2025
@cqhasy cqhasy reopened this Oct 27, 2025
@wu-sheng
Copy link
Member

I am still seeing the GHA flow control files are changed, as well as UI submodule. @mrproliu Please make sure the students understand my asking. And run locally rather than keeping costing upstream.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should not update the protocol, the protocol has already been updated to the latest version.

* Support the go agent(0.7.0 release) bundled pprof profiling feature.

* Profile-receiver-plugin: feat: add go profile data receive func; add google pprof proto to prase.
* Storage: feat: add isGo column to ProfileThreadSnapshotRecord.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The column name should be changed.

return languageType == Language.GO.getValue();
}

public void setGo(final boolean go) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not suitable for a new language in the future, please remove it.

segmentId, start, end);

// Go-only fallback: if this segment has Go snapshots, ignore time window and fetch any sequences
int fbMin = getProfileThreadSnapshotQueryDAO().queryMinSequence(segmentId, 0L, Long.MAX_VALUE);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why can it not use the previous query result in this method? In your way, it will make another 2 DB queries.

try {
// Parse pprof format profile data (payload may be gzip-compressed per pprof spec)
byte[] parsedBytes = tryDecompressGzip(profileData);
ProfileProto.Profile profile = ProfileProto.Profile.parseFrom(parsedBytes);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use library-pprof-parser for this.

@cqhasy
Copy link
Author

cqhasy commented Oct 29, 2025

-2025-10-29-16-37-03.MP4

Comment on lines -52 to +64
FrameTree tree = new FrameTree(getSignature(rawTree.getLocationId()), rawTree.getTotal(), rawTree.getSelf());
FrameTree tree = new FrameTree(getSignature(rawFrameTreeGetLocationId(rawTree)), rawTree.getTotal(), rawTree.getSelf());
for (RawFrameTree rawChild : rawTree.getChildren().values()) {
FrameTree child = parseTree(rawChild);
tree.getChildren().add(child);
}
return tree;
}

// Small indirection to keep minimal change footprint while delegating signature resolution
private long rawFrameTreeGetLocationId(RawFrameTree rawTree) {
return rawTree.getLocationId();
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi, why do you want to add rawFrameTreeGetLocationId method, it seems that there is no change here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend OAP backend related. feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants