Hi all,
I’m glad to announce that we have started a project to refactor XQueue, as part of the Axim request.
What is XQueue?
XQueue is a mechanism that enables site operators to implement external graders for complex assignments. In computing courses for instance, assignments that request the students to write code are complex to evaluate. There is no single correct answer to them, and grading involves executing the code submitted and running many tests on it. In addition to the complexity of supporting multiple programming languages and types of assignments, executing a code provided by a regular user imposes a security risk. That’s why the platform does not include this as part of the core services.
How does it work today?
Today the whole workflow happens in three places:
- in edx-platform, where the student submits the response and receives the grade and feedback
- in an intermediate server, the XQueue Server, totally independent from edx-platform, which keeps track of the submissions in an internal database and serves the API endpoints for the external grader
- in the XQueue Watcher, which implements the external grader functionality.
This diagram shows the current workflow:
What are the objectives of the project?
The project has the following objectives:
- Simplify the global architecture
- Deprecate XQueue Server, which is an under-maintained repo
- Provide more scalable mechanisms for large sites
We also consider these design premises:
- Keep backwards compatibility with existing XQueue Watchers
- Implement an intermediate phase where both solutions can coexist and allow a seamless transition
- Leverage on newer, more scalable mechanisms like the event bus and edx-submissions.
The proposal
With this in mind, we are proposing the following architecture for the new service to replace XQueue:
Legacy external graders that implemented XQueue Watcher or similar (option A) will still work, although the URL of the endpoints will change.
All the functions of the XQueue Server will be assumed by edx-submissions, specially the endpoints for the external graders.
Site operators might want to implement a Django application that interacts with the event bus to retrieve submitted responses and send grades and feedback.
The intermediate phase is not depicted in the diagram, but will allow connecting both via an existing XQueue Server and edx-submissions. Site operators will be able to transition all pending submissions to the new workflow without impacting the users.
How to contribute?
Your comments are welcome! If you are using XQueue, if you have special use cases that we should consider or you have any comment about the project please feel free to reply to this post.