Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch socketpair #576

Merged
merged 19 commits into from
Mar 23, 2024
Merged

Conversation

yuyi2439
Copy link
Contributor

@yuyi2439 yuyi2439 commented Mar 10, 2024

Type

Bug fix, Enhancement


Description

This PR refactors the socket handling in the kernel, splitting sockets into inet and unix domains, and improving the code structure by moving methods and adding new traits. It also simplifies the SocketHandleItem and refactors the socketpair logic. Additionally, it updates the sys_open implementation to use do_sys_open directly and improves file descriptor handling.


Changes walkthrough

Relevant files
Enhancement
mod.rs
Refactored socket handling and improved code structure                     

kernel/src/net/socket/mod.rs

  • Split sockets into inet and unix domains.
  • Added File endpoint and SocketPair trait.
  • Moved pair-related methods from Socket trait to SocketPair trait.
  • Added handling for SockAddrUn.
  • Simplified SocketHandleItem.
  • Refactored socketpair logic.
  • Changed File endpoint to Inode endpoint.
  • Tried using SocketInode for socketpair (unsuccessful).
  • Formatted code.
  • Merged SocketPair trait into Socket trait and removed downcast.
  • Reduced code modifications.
+55/-62 
inet.rs
Refactored socket types and metadata handling                                       

kernel/src/net/socket/inet.rs

  • Added SocketType::Raw, SocketType::Udp, and SocketType::Tcp.
  • Removed SocketType::RawSocket, SocketType::UdpSocket, and
    SocketType::TcpSocket.
  • Updated metadata and handle methods to return SocketMetadata and
    SocketHandle.
  • Removed unnecessary methods and simplified code.
+38/-152
Bug fix
syscall.rs
Improved sys_open implementation                                                                 

kernel/src/filesystem/vfs/syscall.rs

  • Updated sys_open to use do_sys_open directly.
  • Removed unnecessary return statements.
+3/-5     
file.rs
Improved file descriptor handling                                                               

kernel/src/filesystem/vfs/file.rs

  • Validated file descriptor before returning it.
  • Removed unnecessary clone in file descriptor retrieval.
+1/-1     

✨ Usage guide:

Overview:
The describe tool scans the PR code changes, and generates a description for the PR - title, type, summary, walkthrough and labels. The tool can be triggered automatically every time a new PR is opened, or can be invoked manually by commenting on a PR.

When commenting, to edit configurations related to the describe tool (pr_description section), use the following template:

/describe --pr_description.some_config1=... --pr_description.some_config2=...

With a configuration file, use the following template:

[pr_description]
some_config1=...
some_config2=...
Enabling\disabling automation
  • When you first install the app, the default mode for the describe tool is:
pr_commands = ["/describe --pr_description.add_original_user_description=true" 
                         "--pr_description.keep_original_user_title=true", ...]

meaning the describe tool will run automatically on every PR, will keep the original title, and will add the original user description above the generated description.

  • Markers are an alternative way to control the generated description, to give maximal control to the user. If you set:
pr_commands = ["/describe --pr_description.use_description_markers=true", ...]

the tool will replace every marker of the form pr_agent:marker_name in the PR description with the relevant content, where marker_name is one of the following:

  • type: the PR type.
  • summary: the PR summary.
  • walkthrough: the PR walkthrough.

Note that when markers are enabled, if the original PR description does not contain any markers, the tool will not alter the description at all.

Custom labels

The default labels of the describe tool are quite generic: [Bug fix, Tests, Enhancement, Documentation, Other].

If you specify custom labels in the repo's labels page or via configuration file, you can get tailored labels for your use cases.
Examples for custom labels:

  • Main topic:performance - pr_agent:The main topic of this PR is performance
  • New endpoint - pr_agent:A new endpoint was added in this PR
  • SQL query - pr_agent:A new SQL query was added in this PR
  • Dockerfile changes - pr_agent:The PR contains changes in the Dockerfile
  • ...

The list above is eclectic, and aims to give an idea of different possibilities. Define custom labels that are relevant for your repo and use cases.
Note that Labels are not mutually exclusive, so you can add multiple label categories.
Make sure to provide proper title, and a detailed and well-phrased description for each label, so the tool will know when to suggest it.

Inline File Walkthrough 💎

For enhanced user experience, the describe tool can add file summaries directly to the "Files changed" tab in the PR page.
This will enable you to quickly understand the changes in each file, while reviewing the code changes (diffs).

To enable inline file summary, set pr_description.inline_file_summary in the configuration file, possible values are:

  • 'table': File changes walkthrough table will be displayed on the top of the "Files changed" tab, in addition to the "Conversation" tab.
  • true: A collapsable file comment with changes title and a changes summary for each file in the PR.
  • false (default): File changes walkthrough will be added only to the "Conversation" tab.
Utilizing extra instructions

The describe tool can be configured with extra instructions, to guide the model to a feedback tailored to the needs of your project.

Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Notice that the general structure of the description is fixed, and cannot be changed. Extra instructions can change the content or style of each sub-section of the PR description.

Examples for extra instructions:

[pr_description] 
extra_instructions="""
- The PR title should be in the format: '<PR type>: <title>'
- The title should be short and concise (up to 10 words)
- ...
"""

Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.

More PR-Agent commands

To invoke the PR-Agent, add a comment using one of the following commands:

  • /review: Request a review of your Pull Request.
  • /describe: Update the PR title and description based on the contents of the PR.
  • /improve [--extended]: Suggest code improvements. Extended mode provides a higher quality feedback.
  • /ask <QUESTION>: Ask a question about the PR.
  • /update_changelog: Update the changelog based on the PR's contents.
  • /add_docs 💎: Generate docstring for new components introduced in the PR.
  • /generate_labels 💎: Generate labels for the PR based on the PR's contents.
  • /analyze 💎: Automatically analyzes the PR, and presents changes walkthrough for each component.

See the tools guide for more details.
To list the possible configuration parameters, add a /config comment.

See the describe usage page for a comprehensive guide on using this tool.

@@ -87,15 +87,7 @@ impl RawSocket {
}

impl Socket for RawSocket {
fn as_any_ref(&self) -> &dyn core::any::Any {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

这里需要改回来吗,我觉得把关键函数放到开头会好些,不过影响也不大,这由你来决定

@yuyi2439 yuyi2439 marked this pull request as ready for review March 10, 2024 15:33
@dragonos-community-ai-pr-reviewer dragonos-community-ai-pr-reviewer bot added enhancement New feature or request Bug fix A bug is fixed in this pull request labels Mar 10, 2024
@dragonos-community-ai-pr-reviewer

PR Description updated to latest commit (0b8da63)

@dragonos-community-ai-pr-reviewer

PR Analysis

  • 🎯 Main theme: Refactoring and improving socket handling in the kernel
  • 📝 PR summary: This PR refactors the socket handling in the kernel, splitting sockets into inet and unix domains, and improving the code structure by moving methods and adding new traits. It also simplifies the SocketHandleItem and refactors the socketpair logic. Additionally, it updates the sys_open implementation to use do_sys_open directly and improves file descriptor handling.
  • 📌 Type of PR: Bug fix, Enhancement
  • 🧪 Relevant tests added: True
  • ⏱️ Estimated effort to review [1-5]: 3, because the PR involves significant refactoring and changes to the socket handling logic, which requires careful review to ensure correctness and maintain compatibility.
  • 🔒 Security concerns: No, there are no visible security concerns in the provided diff.

PR Feedback

💡 General suggestions: The refactoring of the socket handling in the kernel is a welcome improvement. However, it's important to ensure that the changes do not introduce any regressions or compatibility issues. The addition of new traits and methods should be thoroughly tested to ensure they work as expected. Additionally, the changes to the sys_open implementation and file descriptor handling should be reviewed to ensure they are correctly implemented and do not negatively impact existing functionality.


✨ Usage guide:

Overview:
The review tool scans the PR code changes, and generates a PR review. The tool can be triggered automatically every time a new PR is opened, or can be invoked manually by commenting on any PR.
When commenting, to edit configurations related to the review tool (pr_reviewer section), use the following template:

/review --pr_reviewer.some_config1=... --pr_reviewer.some_config2=...

With a configuration file, use the following template:

[pr_reviewer]
some_config1=...
some_config2=...
Utilizing extra instructions

The review tool can be configured with extra instructions, which can be used to guide the model to a feedback tailored to the needs of your project.

Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Specify the relevant sub-tool, and the relevant aspects of the PR that you want to emphasize.

Examples for extra instructions:

[pr_reviewer] # /review #
extra_instructions="""
In the 'general suggestions' section, emphasize the following:
- Does the code logic cover relevant edge cases?
- Is the code logic clear and easy to understand?
- Is the code logic efficient?
...
"""

Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.

How to enable\disable automation
  • When you first install PR-Agent app, the default mode for the review tool is:
pr_commands = ["/review", ...]

meaning the review tool will run automatically on every PR, with the default configuration.
Edit this field to enable/disable the tool, or to change the used configurations

Auto-labels

The review tool can auto-generate two specific types of labels for a PR:

  • a possible security issue label, that detects possible security issues (enable_review_labels_security flag)
  • a Review effort [1-5]: x label, where x is the estimated effort to review the PR (enable_review_labels_effort flag)
Extra sub-tools

The review tool provides a collection of possible feedbacks about a PR.
It is recommended to review the possible options, and choose the ones relevant for your use case.
Some of the feature that are disabled by default are quite useful, and should be considered for enabling. For example:
require_score_review, require_soc2_ticket, and more.

More PR-Agent commands

To invoke the PR-Agent, add a comment using one of the following commands:

  • /review: Request a review of your Pull Request.
  • /describe: Update the PR title and description based on the contents of the PR.
  • /improve [--extended]: Suggest code improvements. Extended mode provides a higher quality feedback.
  • /ask <QUESTION>: Ask a question about the PR.
  • /update_changelog: Update the changelog based on the PR's contents.
  • /add_docs 💎: Generate docstring for new components introduced in the PR.
  • /generate_labels 💎: Generate labels for the PR based on the PR's contents.
  • /analyze 💎: Automatically analyzes the PR, and presents changes walkthrough for each component.

See the tools guide for more details.
To list the possible configuration parameters, add a /config comment.

See the review usage page for a comprehensive guide on using this tool.

@dragonos-community-ai-pr-reviewer

✨ Usage guide:

Overview:
The improve tool scans the PR code changes, and automatically generates suggestions for improving the PR code. The tool can be triggered automatically every time a new PR is opened, or can be invoked manually by commenting on a PR.
When commenting, to edit configurations related to the improve tool (pr_code_suggestions section), use the following template:

/improve --pr_code_suggestions.some_config1=... --pr_code_suggestions.some_config2=...

With a configuration file, use the following template:

[pr_code_suggestions]
some_config1=...
some_config2=...
Enabling\disabling automation

When you first install the app, the default mode for the improve tool is:

pr_commands = ["/improve --pr_code_suggestions.summarize=true", ...]

meaning the improve tool will run automatically on every PR, with summarization enabled. Delete this line to disable the tool from running automatically.

Utilizing extra instructions

Extra instructions are very important for the improve tool, since they enable to guide the model to suggestions that are more relevant to the specific needs of the project.

Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Specify relevant aspects that you want the model to focus on.

Examples for extra instructions:

[pr_code_suggestions] # /improve #
extra_instructions="""
Emphasize the following aspects:
- Does the code logic cover relevant edge cases?
- Is the code logic clear and easy to understand?
- Is the code logic efficient?
...
"""

Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.

A note on code suggestions quality
  • While the current AI for code is getting better and better (GPT-4), it's not flawless. Not all the suggestions will be perfect, and a user should not accept all of them automatically.
  • Suggestions are not meant to be simplistic. Instead, they aim to give deep feedback and raise questions, ideas and thoughts to the user, who can then use his judgment, experience, and understanding of the code base.
  • Recommended to use the 'extra_instructions' field to guide the model to suggestions that are more relevant to the specific needs of the project, or use the custom suggestions 💎 tool
  • With large PRs, best quality will be obtained by using 'improve --extended' mode.
More PR-Agent commands

To invoke the PR-Agent, add a comment using one of the following commands:

  • /review: Request a review of your Pull Request.
  • /describe: Update the PR title and description based on the contents of the PR.
  • /improve [--extended]: Suggest code improvements. Extended mode provides a higher quality feedback.
  • /ask <QUESTION>: Ask a question about the PR.
  • /update_changelog: Update the changelog based on the PR's contents.
  • /add_docs 💎: Generate docstring for new components introduced in the PR.
  • /generate_labels 💎: Generate labels for the PR based on the PR's contents.
  • /analyze 💎: Automatically analyzes the PR, and presents changes walkthrough for each component.

See the tools guide for more details.
To list the possible configuration parameters, add a /config comment.

See the improve usage page for a more comprehensive guide on using this tool.

@fslongjin
Copy link
Member

@GnoCiYeH

@GnoCiYeH
Copy link
Member

可以给个测试用例吗,麻烦了,因为crossterm库需要使用到uevent,所以我这里暂时不能测试

@dragonosbot dragonosbot added the S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 label Mar 15, 2024
@dragonosbot
Copy link

There are merge commits (commits with multiple parents) in your changes. We have a no merge policy so these commits will need to be removed for this pull request to be merged.

You can start a rebase with the following commands:

$ # rebase
$ git rebase -i master
$ # delete any merge commits in the editor that appears
$ git push --force-with-lease

The following commits are merge commits:

@fslongjin
Copy link
Member

@dragonosbot assign @GnoCiYeH

@yuyi2439
Copy link
Contributor Author

现在仍有bug,unix socket的bind和connect对path的处理不正确

@fslongjin
Copy link
Member

现在仍有bug,unix socket的bind和connect对path的处理不正确

ook,当你搞定的时候,评论
@dragonosbot ready即可

@dragonosbot dragonosbot added the A-fs Area: 文件系统 label Mar 18, 2024
@yuyi2439
Copy link
Contributor Author

@dragonosbot ready

@yuyi2439
Copy link
Contributor Author

目前只是实现了stream类型的socketpair,还没有实现可以bind到路径的socket,不过已经满足需求了,剩下的等以后做

@yuyi2439
Copy link
Contributor Author

@dragonosbot ready

@dragonosbot dragonosbot added S-等待审查 Status: 等待assignee以及相关方的审查。 and removed S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 labels Mar 19, 2024
@fslongjin
Copy link
Member

你的2个测试用例都报错了哦,test_unix_stream_pair这里我打出来reveived_msg的内容是空的

@fslongjin
Copy link
Member

@dragonosbot author

@fslongjin
Copy link
Member

image

@fslongjin
Copy link
Member

@dragonosbot author

@dragonosbot dragonosbot added S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 and removed S-等待审查 Status: 等待assignee以及相关方的审查。 labels Mar 20, 2024
@yuyi2439
Copy link
Contributor Author

经初步测试发现是在merge#615之后就不成功了

@fslongjin fslongjin added this to the DragonOS 0.1.10 milestone Mar 21, 2024
@yuyi2439
Copy link
Contributor Author

@dragonosbot ready

@dragonosbot dragonosbot added S-等待审查 Status: 等待assignee以及相关方的审查。 and removed S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 labels Mar 22, 2024
@fslongjin
Copy link
Member

要进入kernel 目录nake fmt并且修复error哈哈

@fslongjin fslongjin merged commit 6046f77 into DragonOS-Community:master Mar 23, 2024
7 checks passed
@yuyi2439 yuyi2439 deleted the patch-socketpair branch March 23, 2024 11:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-fs Area: 文件系统 Bug fix A bug is fixed in this pull request enhancement New feature or request Review effort [1-5]: 3 S-等待审查 Status: 等待assignee以及相关方的审查。
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants