DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
Contents
...
GSoC 2026 – Aligning Dubbo APIs with Modern gRPC APIs
Background and Goal
Apache Dubbo aims to provide full interoperability with the gRPC ecosystem through the Triple protocol, which is designed to be fully compatible with gRPC communication and tooling.
However, the gRPC ecosystem has evolved significantly in recent years, including improvements in APIs, streaming interfaces, and client/server abstractions.
Some of these updates have not yet been fully reflected in Dubbo's current API design and SDK capabilities.
This project aims to evaluate the latest gRPC APIs and align Dubbo’s APIs with modern gRPC design patterns where appropriate.
Goal
Expected tasks include:
- Investigate the latest gRPC API changes and features.
- Identify gaps between Dubbo’s APIs and the gRPC ecosystem.
- Improve or extend Dubbo APIs to better align with gRPC usage patterns.
- Improve interoperability between Dubbo services and gRPC clients.
- Provide examples and documentation for cross-framework usage.
Possible Extensions
- Improve gRPC streaming support
- Enhance proto-based service definitions
- Improve developer experience for cross-language services
Relevant Skills
- Java
- gRPC
- RPC frameworks
- Distributed systems
Potential Mentors
- Albumen Kevin, Apache Dubbo PMC, albumenj@apache.org

- dev@dubbo.apache.org
Apache Fineract
Loan Origination (POC)
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
"Moving away from RestAssured (low-level) API calls in integration tests and rather use fineract-client-feign would be a great improvement"
Summary (with some assist from chatgpt for clarity)
Apache Fineract has a large set of REST APIs and many integration tests currently call those APIs using RestAssured(low-level HTTP requests). This ticket is to help modernize the tests by switching them to use fineract-client-feign, which is Fineract’s higher-level API client.
Goal
Create a simple migration approach and then migrate a small set of integration tests from RestAssured to fineract-client-feign.
Why we’re doing this
- Makes tests easier to read and maintain (less raw HTTP code).
- Encourages consistent API usage across tests.
- Reduces duplicated request-building logic (headers, base URLs, auth, etc.).
Scope of Work
1) Create a short migration plan
Write a short note (in the Jira ticket comments or a small doc) that answers:
- Where are the current RestAssured-based integration tests located?
- What’s the recommended pattern for using fineract-client-feign in tests?
- What should be migrated first (start small)?
2) Pick a small “starter set” of tests
Identify 2–5 integration tests that:
- Are simple (e.g., create/read/update a resource)
- Don’t involve complicated multi-step workflows
- Run reliably in CI
3) Implement the migration for the starter set
For each selected test:
- Replace RestAssured calls with fineract-client-feign client calls
- Keep the same assertions (same expected behavior)
- Ensure the tests still pass locally and in CI
4) Document the new pattern
Add a short README note or comments in the test code showing:
- How to initialize/configure the Feign client for tests
- How auth/session is handled
- A small “before vs after” explanation (1 paragraph is enough)
Acceptance Criteria
- A brief migration plan is written and linked in the ticket.
- At least 2 integration tests have been converted to use fineract-client-feign.
- All tests pass (locally and/or in CI).
- A short note exists explaining how to write future integration tests using fineract-client-feign.
Notes / Hints for a beginner
- Start by converting just one very small test to learn the pattern.
- Keep changes small and easy to review (one test per commit is ideal).
- If something is unclear (e.g., how auth is set up), add a comment in the ticket describing what you found.
Out of Scope (for this ticket)
- Migrating all integration tests across the repo
- Refactoring production API code
LOAN ORIGINATION CONTEXT
Fineract has some loan origination functionality but it is not robust enough for many operations. Several vendors, working with Fineract have created new Loan Origination plug ins.
There is also a major enhancement underway that would build out a full Loan Origination flow by supporting the backend needs of data storage for such LOS. See ticket https://issues.apache.org/jira/browse/FINERACT-2418 .
The GSOC student would be expected to propose something as a POC (proof of concept) that would use and expand upon the developed Fineract backend solution. It should not revisit the design of that, and it should be separated enough as to not collide with ongoing work in the project that may be moving faster.
It may be useful to build a new component outside of Fineract to create the flows that would demonstrate the LOS functionality.
That is, this is a moving target, and we would need different proposals from prospective candidates to explore the area of Loan Origination. This may require expertise in risk assessment, loan origination models and business acumen. There will not be much more explanation that this available. The student would be expected to be a self starter.
The mentor for this would need to be an expert at risk modeling, understand Loan Origination, and support a conceptual basis that may involve some things internal to Fineract and some processing elements outside of Fineract. Please comment below if you are an existing Fineract contributor with this expertise.
To try to illustrate: one possible GSOC Proposal archtype we could accept would be a survey of Loan Origination Models, their strengths and weaknesses and to identify commonalities for the community to focus on. This would thus be a Requirements exercise and may help identify future roadmap concepts. In this case, the code to be developed may just expose a few APIs into different screen flows. Thus, perhaps FIGMA flows (or similar) connecting to a set of APIs on the backend.
If those new LOS APIs are existing in June 2026 (ticket 2418 resolved), then those APIs are to be used. if they are NOT there in Fineract, then the student would be requested to create a fork and to implement the POC outside of the main Dev branch.
I welcome additions to this write up. jdailey
Fineract Backoffice Interface (POC)
To enable a more comprehensive Fineract project, there will be a new administrative backend User Interface (UI) component. It will be a separate GitHub repository within the Apache Fineract project.
It will be aimed explaining the key functionality of fineract to devs and to act as the demo infrastructure. It will be aimed at being downloaded as part of the Docker container from the ASF, for example.
It should include, for the system user and dev, a page showing all of the APIs organized in a sensible way, and generated automatically at each build.
This back office component is NOT THE SAME as the end-user POC that is proposed in https://issues.apache.org/jira/browse/FINERACT-2440
This does overlap partially with external open source projects that are offered under different licenses. However, this will be apache 2.0 license.
This project will use Angular.
This project should re-imagine the Fineract use cases in a way that is visually simple, distinct, and relates to the several user groups that we see in the project: Fintechs, embedded lending programs, non banking financial institutions (lenders), small banks, etc
Use cases will include, but not be limited to:
- login and select user type
- configure other users
- set up a new loan product
- disburse a loan
- create a savings account
- configure global variables
- run dashboards
Front end application MVP (POC)
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
Build a simple self-service front end that talks to the Self-Service API
We need a new, user-friendly front end app that connects to our Backend for Front end (Self-Service API component) This will be the “customer portal” experience where users can log in, see their accounts, and check recent activity. It should be straightforward, easy to use, and a good reference example for others to build on.
Functionality needed would include:
- Login
- Check balances
- Transfer between accounts owned by the same customer.
- Submit application for a new loan
Testing end to end required.
Solid UI design
Modern app framework
Documentation
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
LOAN ORIGINATION CONTEXT
Fineract has some loan origination functionality but it is not robust enough for many operations. Several vendors, working with Fineract have created new Loan Origination plug ins.
There is also a major enhancement underway that would build out a full Loan Origination flow by supporting the backend needs of data storage for such LOS. See ticket https://issues.apache.org/jira/browse/FINERACT-2418 .
The GSOC student would be expected to propose something as a POC (proof of concept) that would use and expand upon the developed Fineract backend solution. It should not revisit the design of that, and it should be separated enough as to not collide with ongoing work in the project that may be moving faster.
It may be useful to build a new component outside of Fineract to create the flows that would demonstrate the LOS functionality.
That is, this is a moving target, and we would need different proposals from prospective candidates to explore the area of Loan Origination. This may require expertise in risk assessment, loan origination models and business acumen. There will not be much more explanation that this available. The student would be expected to be a self starter.
The mentor for this would need to be an expert at risk modeling, understand Loan Origination, and support a conceptual basis that may involve some things internal to Fineract and some processing elements outside of Fineract. Please comment below if you are an existing Fineract contributor with this expertise.
To try to illustrate: one possible GSOC Proposal archtype we could accept would be a survey of Loan Origination Models, their strengths and weaknesses and to identify commonalities for the community to focus on. This would thus be a Requirements exercise and may help identify future roadmap concepts. In this case, the code to be developed may just expose a few APIs into different screen flows. Thus, perhaps FIGMA flows (or similar) connecting to a set of APIs on the backend.
If those new LOS APIs are existing in June 2026 (ticket 2418 resolved), then those APIs are to be used. if they are NOT there in Fineract, then the student would be requested to create a fork and to implement the POC outside of the main Dev branch.
I welcome additions to this write up. jdailey
Fineract Backoffice Interface (POC)
To enable a more comprehensive Fineract project, there will beCreate a new
administrative backend User Interface (UI) component. It will be a separate GitHub repository within the Apache Fineract project.It will be aimed explaining the key functionality of fineract to devs and to act as the demo infrastructure. It will be aimed at being downloaded as part of the Docker container from the ASF, for example.
It should include, for the system user and dev, a page showing all of the APIs organized in a sensible way, and generated automatically at each build.
This back office component is NOT THE SAME as the end-user POC that is proposed in https://issues.apache.org/jira/browse/FINERACT-2440
This does overlap partially with external open source projects that are offered under different licenses. However, this will be apache 2.0 license.
This project will use Angular.
This project should re-imagine the Fineract use cases in a way that is visually simple, distinct, and relates to the several user groups that we see in the project: Fintechs, embedded lending programs, non banking financial institutions (lenders), small banks, etc
Use cases will include, but not be limited to:
- login and select user type
- configure other users
- set up a new loan product
- disburse a loan
- create a savings account
- configure global variables
- run dashboards
backend for front end component POC
Note: GSOC applicants - this is a "draft concept". Do not work on your proposal until we kick off the process at Fineract for evaluating. We may significantly edit this concept or create new ones to replace it.
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
Build a Self-Service API Component that Connects to Apache Fineract
When the project removed self-service APIs in 2025, it did so understanding that we would need an outside component to make that connection as part of an overall solution.
This project is to create - as a Proof of Concept (POC) - a new dedicated Self-Service API component or service that integration with Fineract backend. It will need to expose APIs to consumer facing applications for typical activities like viewing account balances, transaction initiation, loan application, etc.
The idea is for GSOC candidates to propose a design and build the POC.
Minimal criteria include testing, authentication methodology, documentation.
Not included in this GSOC would be the end consumer APP, although that may be undertaken by another project and coordination would be needed.
BI connector and demonstration
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
The idea is to create a connector and a demonstration of analytics that would consume and organize data from Fineract.
For example, create a way to pull data out of Fineract and make it easy to use in common analytics such as Power BI or Tableau or, better yet, an open source variant. The data should probably go to a Data Warehouse.
Start by proposing and exploring different options and write up the pros and cons.
Create a demonstration project that takes into account security, levels of access, and security of PII data if it exists.
Front end application MVP (POC)
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
Build a simple self-service front end that talks to the Self-Service API
We need a new, user-friendly front end app that connects to our Backend for Front end (Self-Service API component) This will be the “customer portal” experience where users can log in, see their accounts, and check recent activity. It should be straightforward, easy to use, and a good reference example for others to build on.
Functionality needed would include:
- Login
- Check balances
- Transfer between accounts owned by the same customer.
- Submit application for a new loan
Testing end to end required.
Solid UI design
Modern app framework
Documentation
Create a new backend for front end component POC
Note: GSOC applicants - this is a "draft concept". Do not work on your proposal until we kick off the process at Fineract for evaluating. We may significantly edit this concept or create new ones to replace it.
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
Build a Self-Service API Component that Connects to Apache Fineract
When the project removed self-service APIs in 2025, it did so understanding that we would need an outside component to make that connection as part of an overall solution.
This project is to create - as a Proof of Concept (POC) - a new dedicated Self-Service API component or service that integration with Fineract backend. It will need to expose APIs to consumer facing applications for typical activities like viewing account balances, transaction initiation, loan application, etc.
The idea is for GSOC candidates to propose a design and build the POC.
Minimal criteria include testing, authentication methodology, documentation.
Not included in this GSOC would be the end consumer APP, although that may be undertaken by another project and coordination would be needed.
Fix typos in GLClosures and AccountingRule Swagger descriptions
Found and fixed spelling errors in the Swagger-generated API documentation:
- GLClosuresApiResource.java: Changed "identifer" to "identifier".
- AccountingRuleApiResource.java: Changed "Journal entires" to "journal entries".
Fix typos in GLClosures and AccountingRule Swagger descriptions
Found and fixed spelling errors in the Swagger-generated API documentation:
- GLClosuresApiResource.java: Changed "identifer" to "identifier".
- AccountingRuleApiResource.java: Changed "Journal entires" to "journal entries".
Fix SBOM generation errors and issues
```
Task :custom:acme:note:starter:cyclonedxDirectBom
Unable to resolve POM for org.eclipse.platform:org.eclipse.swt:3.124.100
java.lang.IllegalStateException: An error occurred attempting to resolve effective POM
at org.cyclonedx.gradle.MavenHelper.resolveEffectivePom(MavenHelper.java:404)
at org.cyclonedx.gradle.MavenProjectLookup.getResolvedMavenProject(MavenProjectLookup.java:77)
at org.cyclonedx.gradle.DependencyGraphTraverser.extractMetaDataFromRepository(DependencyGraphTraverser.java:183)
at org.cyclonedx.gradle.DependencyGraphTraverser.toSbomComponent(DependencyGraphTraverser.java:153)
at org.cyclonedx.gradle.DependencyGraphTraverser.lambda$toSbomComponents$0(DependencyGraphTraverser.java:139)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1858)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.cyclonedx.gradle.DependencyGraphTraverser.toSbomComponents(DependencyGraphTraverser.java:140)
at org.cyclonedx.gradle.DependencyGraphTraverser.traverseGraph(DependencyGraphTraverser.java:134)
at org.cyclonedx.gradle.SbomGraphProvider.lambda$traverseProject$0(SbomGraphProvider.java:141)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:657)
at org.cyclonedx.gradle.SbomGraphProvider.call(SbomGraphProvider.java:83)
Fix SBOM generation errors and issues
```
Task :custom:acme:note:starter:cyclonedxDirectBom
Unable to resolve POM for org.eclipse.platform:org.eclipse.swt:3.124.100
java.lang.IllegalStateException: An error occurred attempting to resolve effective POM
at org.cyclonedx.gradle.MavenHelperSbomGraphProvider.resolveEffectivePomcall(MavenHelperSbomGraphProvider.java:40448)
at org.gradle.api.cyclonedxinternal.gradleprovider.MavenProjectLookupDefaultProvider.getResolvedMavenProjectcalculateOwnValue(MavenProjectLookupDefaultProvider.java:7773)
at org.gradle.api.cyclonedxinternal.gradleprovider.DependencyGraphTraverserAbstractMinimalProvider.extractMetaDataFromRepositorycalculateOwnPresentValue(DependencyGraphTraverserAbstractMinimalProvider.java:18382)
at org.gradle.api.cyclonedxinternal.gradleprovider.DependencyGraphTraverserAbstractMinimalProvider.toSbomComponentget(DependencyGraphTraverserAbstractMinimalProvider.java:153102)
at org.cyclonedx.gradle.DependencyGraphTraverserCyclonedxDirectTask.lambda$toSbomComponents$0createBom(DependencyGraphTraverserCyclonedxDirectTask.java:139100)
at java.base/javajdk.utilinternal.streamreflect.ReferencePipeline$3$1DirectMethodHandleAccessor.acceptinvoke(ReferencePipelineDirectMethodHandleAccessor.java:197103)
at java.base/java.lang.utilreflect.HashMap$EntrySpliteratorMethod.forEachRemaininginvoke(HashMapMethod.java:1858580)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509:125)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipelineorg.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:49951)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOpsorg.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:92129)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipelineat org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:234244)
at javaorg.base/javagradle.utilinternal.streamoperations.ReferencePipelineDefaultBuildOperationRunner$1.collectexecute(ReferencePipelineDefaultBuildOperationRunner.java:68230)
at org.gradle.cyclonedxinternal.gradleoperations.DependencyGraphTraverserDefaultBuildOperationRunner$1.toSbomComponentsexecute(DependencyGraphTraverserDefaultBuildOperationRunner.java:14027)
at org.gradle.cyclonedxinternal.gradleoperations.DependencyGraphTraverserDefaultBuildOperationRunner$2.traverseGraphexecute(DependencyGraphTraverserDefaultBuildOperationRunner.java:13467)
at org.gradle.cyclonedxinternal.gradleoperations.SbomGraphProviderDefaultBuildOperationRunner$2.lambda$traverseProject$0execute(SbomGraphProviderDefaultBuildOperationRunner.java:14160)
at javaorg.base/javagradle.utilinternal.streamoperations.ReferencePipeline$3$1DefaultBuildOperationRunner.acceptexecute(ReferencePipelineDefaultBuildOperationRunner.java:197167)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliteratorsorg.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:102460)
at javaorg.base/javagradle.utilinternal.streamoperations.AbstractPipelineDefaultBuildOperationRunner.copyIntorun(AbstractPipelineDefaultBuildOperationRunner.java:50948)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipelineorg.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:499229)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOpsorg.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:921212)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipelineorg.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:234195)
at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipelineorg.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:657162)
at org.gradle.internal.cyclonedxexecution.gradlesteps.SbomGraphProviderExecuteStep.callexecuteInternal(SbomGraphProviderExecuteStep.java:83105)
at org.gradle.internal.cyclonedxexecution.gradlesteps.SbomGraphProviderExecuteStep.callaccess$000(SbomGraphProviderExecuteStep.java:4844)
at org.gradle.apiinternal.internalexecution.providersteps.DefaultProviderExecuteStep$1.calculateOwnValuecall(DefaultProviderExecuteStep.java:7359)
at org.gradle.apiinternal.internalexecution.providersteps.AbstractMinimalProviderExecuteStep$1.calculateOwnPresentValuecall(AbstractMinimalProviderExecuteStep.java:8256)
at org.gradle.api.internal.provideroperations.AbstractMinimalProviderDefaultBuildOperationRunner$CallableBuildOperationWorker.getexecute(AbstractMinimalProviderDefaultBuildOperationRunner.java:102210)
at org.gradle.cyclonedxinternal.gradleoperations.CyclonedxDirectTaskDefaultBuildOperationRunner$CallableBuildOperationWorker.createBomexecute(CyclonedxDirectTaskDefaultBuildOperationRunner.java:100205)
at javaorg.base/jdkgradle.internal.reflectoperations.DirectMethodHandleAccessorDefaultBuildOperationRunner$2.invokeexecute(DirectMethodHandleAccessorDefaultBuildOperationRunner.java:10367)
at javaorg.base/javagradle.langinternal.reflectoperations.MethodDefaultBuildOperationRunner$2.invokeexecute(MethodDefaultBuildOperationRunner.java:58060)
at org.gradle.internal.reflectoperations.JavaMethodDefaultBuildOperationRunner.invokeexecute(JavaMethodDefaultBuildOperationRunner.java:125167)
at org.gradle.api.internal.projectoperations.taskfactoryDefaultBuildOperationRunner.StandardTaskAction.doExecuteexecute(StandardTaskActionDefaultBuildOperationRunner.java:5860)
at org.gradle.api.internal.projectoperations.taskfactoryDefaultBuildOperationRunner.StandardTaskAction.executecall(StandardTaskActionDefaultBuildOperationRunner.java:5154)
at org.gradle.api.internal.projectexecution.taskfactorysteps.StandardTaskActionExecuteStep.execute(StandardTaskActionExecuteStep.java:2956)
at org.gradle.api.internal.tasksexecution.executionsteps.TaskExecution$3ExecuteStep.runexecute(TaskExecutionExecuteStep.java:24444)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$1CancelExecutionStep.execute(DefaultBuildOperationRunnerCancelExecutionStep.java:3042)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$1TimeoutStep.executeexecuteWithoutTimeout(DefaultBuildOperationRunnerTimeoutStep.java:2775)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$2TimeoutStep.execute(DefaultBuildOperationRunnerTimeoutStep.java:6755)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$2PreCreateOutputParentsStep.execute(DefaultBuildOperationRunnerPreCreateOutputParentsStep.java:6050)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunnerPreCreateOutputParentsStep.execute(DefaultBuildOperationRunnerPreCreateOutputParentsStep.java:16728)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunnerRemovePreviousOutputsStep.execute(DefaultBuildOperationRunnerRemovePreviousOutputsStep.java:6067)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunnerRemovePreviousOutputsStep.runexecute(DefaultBuildOperationRunnerRemovePreviousOutputsStep.java:4837)
at org.gradle.api.internal.tasksexecution.executionsteps.TaskExecutionBroadcastChangingOutputsStep.executeActionexecute(TaskExecutionBroadcastChangingOutputsStep.java:22961)
at org.gradle.api.internal.tasksexecution.executionsteps.TaskExecutionBroadcastChangingOutputsStep.executeActionsexecute(TaskExecutionBroadcastChangingOutputsStep.java:21226)
at org.gradle.api.internal.tasksexecution.executionsteps.TaskExecutionCaptureOutputsAfterExecutionStep.executeWithPreviousOutputFilesexecute(TaskExecutionCaptureOutputsAfterExecutionStep.java:19569)
at org.gradle.api.internal.tasksexecution.executionsteps.TaskExecutionCaptureOutputsAfterExecutionStep.execute(TaskExecutionCaptureOutputsAfterExecutionStep.java:16246)
at org.gradle.internal.execution.steps.ExecuteStepResolveInputChangesStep.executeInternalexecute(ExecuteStepResolveInputChangesStep.java:10540)
at org.gradle.internal.execution.steps.ExecuteStepResolveInputChangesStep.access$000execute(ExecuteStepResolveInputChangesStep.java:4429)
at org.gradle.internal.execution.steps.ExecuteStep$1BuildCacheStep.callexecuteWithoutCache(ExecuteStepBuildCacheStep.java:59189)
at org.gradle.internal.execution.steps.ExecuteStep$1BuildCacheStep.callexecuteAndStoreInCache(ExecuteStepBuildCacheStep.java:56145)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$CallableBuildOperationWorkerBuildCacheStep.executelambda$executeWithCache$4(DefaultBuildOperationRunnerBuildCacheStep.java:210101)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunnerjava.base/java.util.Optional.orElseGet(Optional.java:205364)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunner$2BuildCacheStep.executelambda$executeWithCache$5(DefaultBuildOperationRunnerBuildCacheStep.java:67101)
at org.gradle.internal.operationsTry$Success.DefaultBuildOperationRunner$2.executemap(DefaultBuildOperationRunnerTry.java:60175)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunnerBuildCacheStep.executeexecuteWithCache(DefaultBuildOperationRunnerBuildCacheStep.java:16785)
at org.gradle.internal.execution.operationssteps.DefaultBuildOperationRunnerBuildCacheStep.executelambda$execute$0(DefaultBuildOperationRunnerBuildCacheStep.java:6074)
at org.gradle.internal.operationsEither$Left.DefaultBuildOperationRunner.callfold(DefaultBuildOperationRunnerEither.java:54115)
at org.gradle.internal.execution.stepscaching.ExecuteStepCachingState.executefold(ExecuteStepCachingState.java:5662)
at org.gradle.internal.execution.steps.ExecuteStepBuildCacheStep.execute(ExecuteStepBuildCacheStep.java:4473)
at org.gradle.internal.execution.steps.CancelExecutionStepBuildCacheStep.execute(CancelExecutionStepBuildCacheStep.java:4248)
at org.gradle.internal.execution.steps.TimeoutStepStoreExecutionStateStep.executeWithoutTimeoutexecute(TimeoutStepStoreExecutionStateStep.java:7546)
at org.gradle.internal.execution.steps.TimeoutStepStoreExecutionStateStep.execute(TimeoutStepStoreExecutionStateStep.java:5535)
at org.gradle.internal.execution.steps.PreCreateOutputParentsStepSkipUpToDateStep.executeexecuteBecause(PreCreateOutputParentsStepSkipUpToDateStep.java:5075)
at org.gradle.internal.execution.steps.PreCreateOutputParentsStepSkipUpToDateStep.executelambda$execute$2(PreCreateOutputParentsStepSkipUpToDateStep.java:2853)
at orgjava.gradlebase/java.internalutil.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStepOptional.orElseGet(Optional.java:67364)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStepSkipUpToDateStep.execute(RemovePreviousOutputsStepSkipUpToDateStep.java:3753)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStepSkipUpToDateStep.execute(BroadcastChangingOutputsStepSkipUpToDateStep.java:6135)
at org.gradle.internal.execution.steps.legacy.BroadcastChangingOutputsStepMarkSnapshottingInputsFinishedStep.execute(BroadcastChangingOutputsStepMarkSnapshottingInputsFinishedStep.java:2637)
at org.gradle.internal.execution.steps.legacy.CaptureOutputsAfterExecutionStepMarkSnapshottingInputsFinishedStep.execute(CaptureOutputsAfterExecutionStepMarkSnapshottingInputsFinishedStep.java:6927)
at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStepResolveIncrementalCachingStateStep.executeexecuteDelegate(CaptureOutputsAfterExecutionStepResolveIncrementalCachingStateStep.java:4649)
at org.gradle.internal.execution.steps.ResolveInputChangesStepResolveIncrementalCachingStateStep.executeexecuteDelegate(ResolveInputChangesStepResolveIncrementalCachingStateStep.java:4027)
at org.gradle.internal.execution.steps.ResolveInputChangesStepAbstractResolveCachingStateStep.execute(ResolveInputChangesStepAbstractResolveCachingStateStep.java:2971)
at org.gradle.internal.execution.steps.BuildCacheStepAbstractResolveCachingStateStep.executeWithoutCacheexecute(BuildCacheStepAbstractResolveCachingStateStep.java:18939)
at org.gradle.internal.execution.steps.BuildCacheStepResolveChangesStep.executeAndStoreInCacheexecute(BuildCacheStepResolveChangesStep.java:14565)
at org.gradle.internal.execution.steps.BuildCacheStepResolveChangesStep.lambda$executeWithCache$4execute(BuildCacheStepResolveChangesStep.java:10136)
at java.base/java.util.Optional.orElseGet(Optionalorg.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:364107)
at org.gradle.internal.execution.steps.BuildCacheStepValidateStep.lambda$executeWithCache$5execute(BuildCacheStepValidateStep.java:10156)
at org.gradle.internal.execution.steps.Try$SuccessAbstractCaptureStateBeforeExecutionStep.mapexecute(TryAbstractCaptureStateBeforeExecutionStep.java:17564)
at org.gradle.internal.execution.steps.BuildCacheStepAbstractCaptureStateBeforeExecutionStep.executeWithCacheexecute(BuildCacheStepAbstractCaptureStateBeforeExecutionStep.java:8543)
at org.gradle.internal.execution.steps.BuildCacheStepAbstractSkipEmptyWorkStep.lambda$execute$0executeWithNonEmptySources(BuildCacheStepAbstractSkipEmptyWorkStep.java:74125)
at org.gradle.internal.execution.steps.Either$LeftAbstractSkipEmptyWorkStep.foldexecute(EitherAbstractSkipEmptyWorkStep.java:11556)
at org.gradle.internal.execution.cachingsteps.CachingStateAbstractSkipEmptyWorkStep.foldexecute(CachingStateAbstractSkipEmptyWorkStep.java:6236)
at org.gradle.internal.execution.steps.legacy.BuildCacheStepMarkSnapshottingInputsStartedStep.execute(BuildCacheStepMarkSnapshottingInputsStartedStep.java:7338)
at org.gradle.internal.execution.steps.BuildCacheStepLoadPreviousExecutionStateStep.execute(BuildCacheStepLoadPreviousExecutionStateStep.java:4836)
at org.gradle.internal.execution.steps.StoreExecutionStateStepLoadPreviousExecutionStateStep.execute(StoreExecutionStateStepLoadPreviousExecutionStateStep.java:4623)
at org.gradle.internal.execution.steps.StoreExecutionStateStepHandleStaleOutputsStep.execute(StoreExecutionStateStepHandleStaleOutputsStep.java:3575)
at org.gradle.internal.execution.steps.SkipUpToDateStepHandleStaleOutputsStep.executeBecauseexecute(SkipUpToDateStepHandleStaleOutputsStep.java:7541)
at org.gradle.internal.execution.steps.SkipUpToDateStepAssignMutableWorkspaceStep.lambda$execute$2lambda$execute$0(SkipUpToDateStepAssignMutableWorkspaceStep.java:5335)
at java.base/java.util.Optional.orElseGet(Optionalorg.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:364289)
at org.gradle.internal.execution.steps.SkipUpToDateStepAssignMutableWorkspaceStep.execute(SkipUpToDateStepAssignMutableWorkspaceStep.java:5331)
at org.gradle.internal.execution.steps.SkipUpToDateStepAssignMutableWorkspaceStep.execute(SkipUpToDateStepAssignMutableWorkspaceStep.java:3522)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStepChoosePipelineStep.execute(MarkSnapshottingInputsFinishedStepChoosePipelineStep.java:3740)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStepChoosePipelineStep.execute(MarkSnapshottingInputsFinishedStepChoosePipelineStep.java:2723)
at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStepExecuteWorkBuildOperationFiringStep.executeDelegatelambda$execute$2(ResolveIncrementalCachingStateStepExecuteWorkBuildOperationFiringStep.java:4967)
at orgjava.gradlebase/java.internalutil.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStepOptional.orElseGet(Optional.java:27364)
at org.gradle.internal.execution.steps.AbstractResolveCachingStateStepExecuteWorkBuildOperationFiringStep.execute(AbstractResolveCachingStateStepExecuteWorkBuildOperationFiringStep.java:7167)
at org.gradle.internal.execution.steps.AbstractResolveCachingStateStepExecuteWorkBuildOperationFiringStep.execute(AbstractResolveCachingStateStepExecuteWorkBuildOperationFiringStep.java:39)
at org.gradle.internal.execution.steps.ResolveChangesStepIdentityCacheStep.execute(ResolveChangesStepIdentityCacheStep.java:6546)
at org.gradle.internal.execution.steps.ResolveChangesStepIdentityCacheStep.execute(ResolveChangesStepIdentityCacheStep.java:3634)
at org.gradle.internal.execution.steps.ValidateStepIdentifyStep.execute(ValidateStepIdentifyStep.java:10748)
at org.gradle.internal.execution.steps.ValidateStepIdentifyStep.execute(ValidateStepIdentifyStep.java:5635)
at org.gradle.internal.execution.stepsimpl.AbstractCaptureStateBeforeExecutionStepDefaultExecutionEngine$1.execute(AbstractCaptureStateBeforeExecutionStepDefaultExecutionEngine.java:64)
at org.gradle.api.internal.tasks.execution.stepsExecuteActionsTaskExecuter.AbstractCaptureStateBeforeExecutionStep.executeexecuteIfValid(AbstractCaptureStateBeforeExecutionStepExecuteActionsTaskExecuter.java:43127)
at org.gradle.api.internal.tasks.execution.stepsExecuteActionsTaskExecuter.AbstractSkipEmptyWorkStep.executeWithNonEmptySourcesexecute(AbstractSkipEmptyWorkStepExecuteActionsTaskExecuter.java:125116)
at org.gradle.api.internal.tasks.execution.steps.AbstractSkipEmptyWorkStepProblemsTaskPathTrackingTaskExecuter.execute(AbstractSkipEmptyWorkStepProblemsTaskPathTrackingTaskExecuter.java:5641)
at org.gradle.api.internal.tasks.execution.steps.AbstractSkipEmptyWorkStepFinalizePropertiesTaskExecuter.execute(AbstractSkipEmptyWorkStepFinalizePropertiesTaskExecuter.java:3646)
at org.gradle.api.internal.tasks.execution.steps.legacy.MarkSnapshottingInputsStartedStepResolveTaskExecutionModeExecuter.execute(MarkSnapshottingInputsStartedStepResolveTaskExecutionModeExecuter.java:3851)
at org.gradle.api.internal.tasks.execution.steps.LoadPreviousExecutionStateStepSkipTaskWithNoActionsExecuter.execute(LoadPreviousExecutionStateStepSkipTaskWithNoActionsExecuter.java:3657)
at org.gradle.api.internal.tasks.execution.steps.LoadPreviousExecutionStateStepSkipOnlyIfTaskExecuter.execute(LoadPreviousExecutionStateStepSkipOnlyIfTaskExecuter.java:2374)
at org.gradle.api.internal.tasks.execution.steps.HandleStaleOutputsStepCatchExceptionTaskExecuter.execute(HandleStaleOutputsStepCatchExceptionTaskExecuter.java:7536)
at org.gradle.api.internal.tasks.execution.stepsEventFiringTaskExecuter$1.HandleStaleOutputsStep.executeexecuteTask(HandleStaleOutputsStepEventFiringTaskExecuter.java:4177)
at org.gradle.api.internal.tasks.execution.steps.AssignMutableWorkspaceStepEventFiringTaskExecuter$1.lambda$execute$0call(AssignMutableWorkspaceStepEventFiringTaskExecuter.java:3555)
at org.gradle.api.internal.tasks.execution.TaskExecution$4EventFiringTaskExecuter$1.withWorkspacecall(TaskExecutionEventFiringTaskExecuter.java:28952)
at org.gradle.internal.executionoperations.steps.AssignMutableWorkspaceStepDefaultBuildOperationRunner$CallableBuildOperationWorker.execute(AssignMutableWorkspaceStepDefaultBuildOperationRunner.java:31210)
at org.gradle.internal.executionoperations.steps.AssignMutableWorkspaceStepDefaultBuildOperationRunner$CallableBuildOperationWorker.execute(AssignMutableWorkspaceStepDefaultBuildOperationRunner.java:22205)
at org.gradle.internal.executionoperations.steps.ChoosePipelineStepDefaultBuildOperationRunner$2.execute(ChoosePipelineStepDefaultBuildOperationRunner.java:4067)
at org.gradle.internal.executionoperations.stepsDefaultBuildOperationRunner$2.ChoosePipelineStep.execute(ChoosePipelineStepDefaultBuildOperationRunner.java:2360)
at org.gradle.internal.executionoperations.stepsDefaultBuildOperationRunner.ExecuteWorkBuildOperationFiringStep.lambda$execute$2execute(ExecuteWorkBuildOperationFiringStepDefaultBuildOperationRunner.java:67167)
at java.base/java.util.Optional.orElseGet(Optionalorg.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:36460)
at org.gradle.internal.executionoperations.stepsDefaultBuildOperationRunner.ExecuteWorkBuildOperationFiringStep.executecall(ExecuteWorkBuildOperationFiringStepDefaultBuildOperationRunner.java:6754)
at org.gradle.api.internal.tasks.execution.steps.ExecuteWorkBuildOperationFiringStepEventFiringTaskExecuter.execute(ExecuteWorkBuildOperationFiringStepEventFiringTaskExecuter.java:3952)
at org.gradle.internal.execution.stepsplan.IdentityCacheStepLocalTaskNodeExecutor.execute(IdentityCacheStepLocalTaskNodeExecutor.java:4642)
at org.gradle.internal.execution.stepstaskgraph.IdentityCacheStepDefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(IdentityCacheStepDefaultTaskExecutionGraph.java:34331)
at org.gradle.internal.execution.stepstaskgraph.IdentifyStepDefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(IdentifyStepDefaultTaskExecutionGraph.java:48318)
at org.gradle.internal.execution.stepstaskgraph.IdentifyStepDefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.executelambda$execute$0(IdentifyStepDefaultTaskExecutionGraph.java:35314)
at org.gradle.internal.executionoperations.implCurrentBuildOperationRef.DefaultExecutionEngine$1.executewith(DefaultExecutionEngineCurrentBuildOperationRef.java:6485)
at org.gradle.apiexecution.internaltaskgraph.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuterDefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:127314)
at org.gradle.apiexecution.internal.tasks.execution.ExecuteActionsTaskExecutertaskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(ExecuteActionsTaskExecuterDefaultTaskExecutionGraph.java:116303)
at org.gradle.apiexecution.internalplan.tasksDefaultPlanExecutor$ExecutorWorker.execution.ProblemsTaskPathTrackingTaskExecuter.execute(ProblemsTaskPathTrackingTaskExecuterDefaultPlanExecutor.java:41459)
at org.gradle.apiexecution.internalplan.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuterDefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:46376)
at org.gradle.apiexecution.internalplan.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuterDefaultPlanExecutor.process(DefaultPlanExecutor.java:51111)
at org.gradle.apiexecution.internaltaskgraph.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuterDefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:57138)
at org.gradle.apiexecution.internal.tasks.execution.SkipOnlyIfTaskExecutertaskgraph.DefaultTaskExecutionGraph.execute(SkipOnlyIfTaskExecuterDefaultTaskExecutionGraph.java:74123)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuterSelectedTaskExecutionAction.execute(CatchExceptionTaskExecuterSelectedTaskExecutionAction.java:3635)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1DryRunBuildExecutionAction.executeTaskexecute(EventFiringTaskExecuterDryRunBuildExecutionAction.java:7751)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(EventFiringTaskExecuterBuildOperationFiringBuildWorkerExecutor.java:5554)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(EventFiringTaskExecuterBuildOperationFiringBuildWorkerExecutor.java:5243)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuterBuildOperationFiringBuildWorkerExecutor.execute(EventFiringTaskExecuterBuildOperationFiringBuildWorkerExecutor.java:5240)
at org.gradle.executioninternal.planbuild.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318DefaultBuildLifecycleController.lambda$executeTasks$10(DefaultBuildLifecycleController.java:313)
at org.gradle.executioninternal.taskgraphmodel.DefaultTaskExecutionGraph$BuildOperationAwareExecutionActionStateTransitionController.lambda$execute$0doTransition(DefaultTaskExecutionGraphStateTransitionController.java:314266)
at org.gradle.internal.operationsmodel.CurrentBuildOperationRefStateTransitionController.withlambda$tryTransition$8(CurrentBuildOperationRefStateTransitionController.java:85177)
at org.gradle.executioninternal.taskgraphwork.DefaultTaskExecutionGraph$BuildOperationAwareExecutionActionDefaultSynchronizer.executewithLock(DefaultTaskExecutionGraphDefaultSynchronizer.java:31446)
at org.gradle.executioninternal.taskgraphmodel.DefaultTaskExecutionGraph$BuildOperationAwareExecutionActionStateTransitionController.executetryTransition(DefaultTaskExecutionGraphStateTransitionController.java:303177)
at org.gradle.executioninternal.planbuild.DefaultPlanExecutor$ExecutorWorkerDefaultBuildLifecycleController.executeexecuteTasks(DefaultPlanExecutorDefaultBuildLifecycleController.java:459304)
at org.gradle.executioninternal.planbuild.DefaultPlanExecutor$ExecutorWorkerDefaultBuildWorkGraphController$DefaultBuildWorkGraph.runrunWork(DefaultPlanExecutorDefaultBuildWorkGraphController.java:376220)
at org.gradle.executioninternal.planwork.DefaultPlanExecutorDefaultWorkerLeaseService.processwithLocks(DefaultPlanExecutorDefaultWorkerLeaseService.java:111263)
at org.gradle.executioninternal.taskgraphwork.DefaultTaskExecutionGraphDefaultWorkerLeaseService.executeWithServicesrunAsWorkerThread(DefaultTaskExecutionGraphDefaultWorkerLeaseService.java:138127)
at org.gradle.executioncomposite.taskgraphinternal.DefaultTaskExecutionGraphDefaultBuildController.executedoRun(DefaultTaskExecutionGraphDefaultBuildController.java:123181)
at org.gradle.composite.executioninternal.SelectedTaskExecutionActionDefaultBuildController.executeaccess$000(SelectedTaskExecutionActionDefaultBuildController.java:3550)
at org.gradle.composite.executioninternal.DryRunBuildExecutionActionDefaultBuildController$BuildOpRunnable.executelambda$run$0(DryRunBuildExecutionActionDefaultBuildController.java:51198)
at org.gradle.internal.executionoperations.BuildOperationFiringBuildWorkerExecutor$ExecuteTasksCurrentBuildOperationRef.callwith(BuildOperationFiringBuildWorkerExecutorCurrentBuildOperationRef.java:5485)
at org.gradle.composite.executioninternal.BuildOperationFiringBuildWorkerExecutor$ExecuteTasksDefaultBuildController$BuildOpRunnable.callrun(BuildOperationFiringBuildWorkerExecutorDefaultBuildController.java:43198)
at orgjava.gradlebase/java.internalutil.operationsconcurrent.DefaultBuildOperationRunner$CallableBuildOperationWorkerExecutors$RunnableAdapter.executecall(DefaultBuildOperationRunnerExecutors.java:210572)
at orgjava.gradlebase/java.internalutil.operationsconcurrent.DefaultBuildOperationRunner$CallableBuildOperationWorkerFutureTask.executerun(DefaultBuildOperationRunnerFutureTask.java:205317)
at org.gradle.internal.operationsconcurrent.DefaultBuildOperationRunner$2ExecutorPolicy$CatchAndRecordFailures.executeonExecute(DefaultBuildOperationRunnerExecutorPolicy.java:6764)
at org.gradle.internal.operationsconcurrent.DefaultBuildOperationRunner$2AbstractManagedExecutor$1.executerun(DefaultBuildOperationRunnerAbstractManagedExecutor.java:6048)
at orgjava.gradlebase/java.internalutil.operationsconcurrent.DefaultBuildOperationRunnerThreadPoolExecutor.executerunWorker(DefaultBuildOperationRunnerThreadPoolExecutor.java:1671144)
at orgjava.gradlebase/java.internalutil.operationsconcurrent.DefaultBuildOperationRunnerThreadPoolExecutor$Worker.executerun(DefaultBuildOperationRunnerThreadPoolExecutor.java:60642)
at orgjava.gradlebase/java.internallang.operationsThread.DefaultBuildOperationRunner.callrun(DefaultBuildOperationRunnerThread.java:54)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:40)1583)
Caused by: org.apache.maven.model.building.ModelBuildingException: 1 problem was encountered while building the effective model for org.eclipse.platform:org.eclipse.swt:3.124.100
[ERROR] 'dependencies.dependency.artifactId' for org.eclipse.platform:org.eclipse.swt.${osgi.platform}:jar with value 'org.eclipse.swt.${osgi.platform}' does not match a valid id pattern. @
at org.apache.gradlemaven.internalmodel.buildbuilding.DefaultBuildLifecycleControllerDefaultModelProblemCollector.lambda$executeTasks$10newModelBuildingException(DefaultBuildLifecycleControllerDefaultModelProblemCollector.java:313176)
at org.gradleapache.internalmaven.model.building.StateTransitionControllerDefaultModelBuilder.doTransitionbuild(StateTransitionControllerDefaultModelBuilder.java:266550)
at org.gradleapache.internalmaven.model.StateTransitionControllerbuilding.DefaultModelBuilder.lambda$tryTransition$8build(StateTransitionControllerDefaultModelBuilder.java:177419)
at org.apache.gradlemaven.internalmodel.workbuilding.DefaultSynchronizerDefaultModelBuilder.withLockbuild(DefaultSynchronizerDefaultModelBuilder.java:46248)
at org.cyclonedx.gradle.internal.model.StateTransitionController.tryTransition(StateTransitionControllerMavenHelper.resolveEffectivePom(MavenHelper.java:177402)
at org.gradle.internal.build.DefaultBuildLifecycleController.executeTasks(DefaultBuildLifecycleController.java:304)
at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.runWork(DefaultBuildWorkGraphController.java:220)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
at org.gradle.composite.internal.DefaultBuildController.doRun(DefaultBuildController.java:181)
at org.gradle.composite.internal.DefaultBuildController.access$000(DefaultBuildController.java:50)
at org.gradle.composite.internal.DefaultBuildController$BuildOpRunnable.lambda$run$0(DefaultBuildController.java:198)
at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85)
at org.gradle.composite.internal.DefaultBuildController$BuildOpRunnable.run(DefaultBuildController.java:198)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.apache.maven.model.building.ModelBuildingException: 1 problem was encountered while building the effective model for org.eclipse.platform:org.eclipse.swt:3.124.100
[ERROR] 'dependencies.dependency.artifactId' for org.eclipse.platform:org.eclipse.swt.${osgi.platform}:jar with value 'org.eclipse.swt.${osgi.platform}' does not match a valid id pattern. @
at org.apache.maven.model.building.DefaultModelProblemCollector.newModelBuildingException(DefaultModelProblemCollector.java:176)
at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:550)
at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:419)
at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:248)
at org.cyclonedx.gradle.MavenHelper.resolveEffectivePom(MavenHelper.java:402)
... 189 more
Unknown file extension: custom/acme/note/starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
... 189 more
Unknown file extension: custom/acme/note/starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
BI connector and demonstration
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
The idea is to create a connector and a demonstration of analytics that would consume and organize data from Fineract.
For example, create a way to pull data out of Fineract and make it easy to use in common analytics such as Power BI or Tableau or, better yet, an open source variant. The data should probably go to a Data Warehouse.
Start by proposing and exploring different options and write up the pros and cons.
Create a demonstration project that takes into account security, levels of access, and security of PII data if it exists.
fineract-client-feign usage for integration tests
No one should work on this specific ticket unless assigned - the GSOC candidate we choose will be assigned this ticket.
For more information, you should be reviewing emails on this subject and following the Wiki pages.
https://lists.apache.org/list.html?dev@fineract.apache.org
https://cwiki.apache.org/confluence/display/FINERACT/GSOC+Program+at+Fineract
"Moving away from RestAssured (low-level) API calls in integration tests and rather use fineract-client-feign would be a great improvement"
Summary (with some assist from chatgpt for clarity)
Apache Fineract has a large set of REST APIs and many integration tests currently call those APIs using RestAssured(low-level HTTP requests). This ticket is to help modernize the tests by switching them to use fineract-client-feign, which is Fineract’s higher-level API client.
Goal
Create a simple migration approach and then migrate a small set of integration tests from RestAssured to fineract-client-feign.
Why we’re doing this
- Makes tests easier to read and maintain (less raw HTTP code).
- Encourages consistent API usage across tests.
- Reduces duplicated request-building logic (headers, base URLs, auth, etc.).
Scope of Work
1) Create a short migration plan
Write a short note (in the Jira ticket comments or a small doc) that answers:
- Where are the current RestAssured-based integration tests located?
- What’s the recommended pattern for using fineract-client-feign in tests?
- What should be migrated first (start small)?
2) Pick a small “starter set” of tests
Identify 2–5 integration tests that:
- Are simple (e.g., create/read/update a resource)
- Don’t involve complicated multi-step workflows
- Run reliably in CI
3) Implement the migration for the starter set
For each selected test:
- Replace RestAssured calls with fineract-client-feign client calls
- Keep the same assertions (same expected behavior)
- Ensure the tests still pass locally and in CI
4) Document the new pattern
Add a short README note or comments in the test code showing:
- How to initialize/configure the Feign client for tests
- How auth/session is handled
- A small “before vs after” explanation (1 paragraph is enough)
Acceptance Criteria
- A brief migration plan is written and linked in the ticket.
- At least 2 integration tests have been converted to use fineract-client-feign.
- All tests pass (locally and/or in CI).
- A short note exists explaining how to write future integration tests using fineract-client-feign.
Notes / Hints for a beginner
- Start by converting just one very small test to learn the pattern.
- Keep changes small and easy to review (one test per commit is ideal).
- If something is unclear (e.g., how auth is set up), add a comment in the ticket describing what you found.
Out of Scope (for this ticket)
- Migrating all integration tests across the repo
- Refactoring production API code
- Changing API behavior—this is only a test client swap
...
Apache Fluss (Incubating) Native RoaringBitmap Integration for Apache Fluss
Synopsis
Apache Fluss currently incorporates the BITMAP data type within its metadata layer, but it remains inaccessible to end-users as it is trapped in the UnsupportedKeyword enum. While the aggregation merge engine in Fluss 0.9 supports rbm32/rbm64 at the storage level, BITMAP is not yet a first-class type. Users must currently declare bitmap columns as BYTES.
This GSoC project aims to enable end-to-end native support for the BITMAP data type to allow efficient server-side unique counting. By shifting the computational burden from the client side to the storage side, we can reduce network I/O and CPU utilization for high-cardinality DISTINCT-style aggregations. The project will introduce a proper BITMAP DDL type, SQL functions, and pushdown optimization via applyAggregates().
Benefits to Community
1. Network I/O Efficiency: With bitmap pushdown, only one serialized RoaringBitmap is transferred per group instead of all raw rows, reducing network cost from O(N) to O(G).
2. CPU Utilization Reduction: Heavy unique counting computation is offloaded to the Fluss TabletServer's native merge engine, reducing Flink TaskManager CPU overhead.
3. Ecosystem Interoperability: By using the standard RoaringBitmap binary serialization format, Fluss ensures bitmap data remains accessible to downstream consumers such as Flink, StarRocks, and Doris without requiring proprietary Fluss-specific headers or custom decoders.
4. UV Analytics Optimization: Enables efficient Unique Visitor analytics workflows with pre-aggregated bitmap fragments that can be efficiently merged on the storage side.
Deliverables
The student will deliver the following components:
1. Type System Enablement (fluss-common)
- Introduce BitmapType as a new logical type in fluss-common
- Extend DataTypeParser to support the BITMAP keyword in CREATE TABLE statements
- Define BITMAP type properties (nullable, not orderable, cannot be used as primary key or partition key)
2. Server-Side Aggregation Integration (fluss-server)
- Wire FieldRoaringBitmap32Agg to the new BITMAP logical type
- Extend FieldRoaringBitmap32AggFactory to accept DataTypeRoot.BITMAP in addition to DataTypeRoot.BYTES
- Update AggFunctionType.getSupportedDataTypeRoots() accordingly
- Perform comprehensive audit of AggregationMergeEngine for BITMAP type handling
3. Flink Connector Bridge (fluss-flink)
- Implement SQL UDFs: BITMAP_BUILD_AGG, BITMAP_OR_AGG, BITMAP_CARDINALITY, BITMAP_FROM_BYTES, BITMAP_TO_BYTES
- Extend PbDataTypeRoot with BITMAP = 16 for RPC message support
- Implement applyAggregates() pushdown optimization for BITMAP_OR_AGG
- Handle graceful fallback to Flink-side aggregation when pushdown is not applicable
4. Testing & Documentation
- Functional unit tests for BitmapType and FieldRoaringBitmap32Agg
- End-to-end integration tests (BitmapPushdownITCase) in flink-flink-common module
- Performance benchmarks measuring network I/O and CPU utilization improvements
- User documentation and SQL reference guides
Required Skills
- Proficiency in Java programming
- Understanding of distributed systems and data processing concepts
- Familiarity with Apache Flink or similar stream processing frameworks
- Knowledge of SQL and query optimization is a plus
- Experience with bitmap data structures (RoaringBitmap) is advantageous
- Good communication skills for community collaboration
Difficulty Level
Medium to Hard
This project requires understanding of multiple layers in the Fluss stack (common, server, flink connector) and involves type system changes, aggregation engine integration, and query optimization. A working prototype demonstrating BitmapType integration with FieldRoaringBitmap32Agg is available to help the student get started.
MentorsThe Apache Fluss community will provide experienced mentors for this project. Mentor details will be announced on the Fluss dev mailing list before the GSoC application period.
- Giannis Polyzos (ipolyzos@apache.org)
Future Work (Stretch Goals)
- Native 64-bit support (BITMAP64 type) for IDs exceeding 32-bit range
- Advanced conversion functions: BITMAP_TO_ARRAY, BITMAP_TO_STRING, BITMAP_XOR_AGG
- Reverse materialization: UNNEST_BITMAP to explode bitmaps back into individual integer rows
Name and Contact Information
Project: Apache Fluss (Incubating)
Website: https://fluss.apache.org
Mailing List: dev@fluss.apache.org
GitHub: https://github.com/apache/fluss
...