Engula 2022 #245
Replies: 2 comments 3 replies
-
I think we should continue to apply asynchronous code as long as it is really necessary. Because there still are many works that need to solve for synchronous code, and the compiler lacks a lot of information for optimization. In addition, the async trait is a problem that is limited by theory. The STM generated by compiler is a DST type, which is used as the method return value. If it needs to be placed on the stack, then the trait object cannot be created, because it isn't object safe. The cargo Rest LGTM. |
Beta Was this translation helpful? Give feedback.
-
I suggest that we build this module structure virtually and flexibly:
It's hard to determine who is the expert to a specific patch/proposal. Module teams doesn't resolve the problem thoroughly especially when a proposal affects multiple modules. We should try to build governance as simple as possible. Apache Hadoop has 236 committers share the same write permission, but when a committer is unsure whether or not the decision is proper, they will ask for their peers. Trust is important for open-source community, not restriction. Here is previous discussion in #97 (reply in thread): I think that more than one maintainers can drive the community go in a way with peer decisions. Here is a recent discussion that happens in ASF Incubator about the bar of committers (and can be referred when thinking of maintainers, too):
With our offline discussion, I second that the maintainer group (critical mass) should represent the direction of Engula. If we're currently focusing on the storage engine, growing members in this domain is great. However, an open-source community consists of multiple aspects, which is essential since we're (aimed at) producing software for users, not writing the code itself. The module structure cannot cover no code contributions also. |
Beta Was this translation helpful? Give feedback.
-
Review
Engula was open-sourced in August last year. Engula was just a one-man project with a draft design document back then. But now the project has released two versions (demo 1 and v0.2), and the community has grown up to a dozen active contributors! We are also glad to see that more and more people have started understanding Engula's goals and position.
In the past few months, we did a lot of design, discussion, and prototyping to build better abstractions and implementations. These efforts are valuable and have resulted in a clearer design document and a modular project structure. However, despite what we have done, the project development is far from efficient. There exist some problems we need to address in the next stage:
To tackle these problems, I propose some solutions as follows. All of these are open for discussion.
Focus on specific goals and designs
The design of a specific Engula engine depends on both the upper-level applications and the low-level Engula modules. But the design of a low-level Engula module, in turn, depends on the engine use cases. These give us a dilemma on the design of different modules. To address this problem, we should set a clearer goal for the next stage.
We can set the goals of Engula 2022 as follows:
Kernel
,Journal
,Storage
, andBackground
interfaces (P1)We focus on stabilizing the interfaces of low-level modules first because they are more general-purpose and easier to reason about. With these stable low-level modules, we can then start designing more sophisticated engines on top of them.
Some more specific goals for different modules:
Engine
Kernel
Journal
for leader election and metadata storageJournal
Journal
:Kernel
metadata storage)Storage
Storage
based on a cache storage and an object storageThe detailed design of these modules should be submitted as RFC documents later.
Build an efficient team structure
One side benefit of making Engula modular is that we can also make the team modular along with the project structure. Specifically, we can build a team as follows:
Asynchronous Rust
TODO: Maybe we don't have to apply asynchronous code to every part of the project? For example, can we build the engine module with synchronous code?
Beta Was this translation helpful? Give feedback.
All reactions