Tag Archives: sayan chowdhury

It’s been two weeks since i last posted my report on Darkserver. I could not post week two update as I had been down with bad health(seasonal changes + Loo). With the week coming to an end and /me recovering from fever, i badly hurt my right wrist and that was end of it. I somehow manage to move myself to a new city, Bengaluru. The week passed as a trauma for me 😥

After recovering, i was back to coding/resolving issue in darkserver. Starting from the mid of week three, I started working on implementing the support for secondary architecture. Darkserver now supports secondary architecture(arm, ppc).

Defining the current structure of Darkserver:


$ darkproducer --start=BUILD_ID --config=CONFIG
-s BUILD_ID, --start=BUILD_ID Specifies the build id
-c CONFIG, --config=CONFIG Specifies the Config file

The config files points to either of the configuration files for Koji, ARM, PowerPC. The files being darkserverurl-koji.conf, darkserverurl-arm.conf, darkserverurl-ppc.conf placed under configs/. The default being for koji.

A “url” key was added to retask Queue to maintain the relation between the build_id and the architecture.
The command line arguments in Darkserver are currently now parsed by optparse python module.
So, a pid is added to darkbuildqueue and darkjobworker, so the command line arguments now is:


$ darkbuildqueue --start --pid=1
-s, --start start the buildqueue
-p PID, --pid=PID specify the pid for build queue


$ darkjobworkder --start --pid=1 // To start job worker 1
$ darkjobworkder --start --pid=2 // To start job worker 2
$ darkjobworkder --stop --pid=1 // To stop job worker 1
-s, --start start the buildqueue
-e, --stop stop the buildqueue
-p PID, --pid=PID specify the pid

The “Google Summer of Code” code period began on June 17 and it’s already one week into it. Prior to the beginning of the coding period, I went into the depths of the darkserver codebase. In the current version of Darkserver, the link present in the libimporter are hardlinks and it is pretty well visible here

So, I removed the urls and the values from the libimporter and made it configurable via config files. The config files are currently present in the configs/ directory. This will eventually help to allow us to add different job queues for different secondary architectures.

According to the Darkserver wiki, the steps for starting the darkproducer is:

$ darkproducer start KOJI_BUILD_ID

Now, after removing the hardlinks and making it accesible through config files, the steps to start the darkproducer is:

$ darkproducer start KOJI_BUILD_ID --config=/path/to/config/file

The configuration file for koji should be in form of:

url = ''

In case of violation, the –config option defaults to /etc/darkserver/darkserverurl-koji.conf

Next, I would be aiming for implementing the support for the secondary architectures, arm, ppc and add support to maintain different job queues for the different secondary architectures.

The Google Summer of Code 2013 results was declared on 27th May 2013, in between my semester exam so i had no time to devote until the end of my semester exams and /me returning back to my home.

With the beginning of the 2nd week of June, I started to hack around with the project, Darkserver. The project is available on GitHub,

That week was pretty much a reading week rather than coding week as I had to go through all kinds of documentation. Darkserver is implemented using retask, which uses Redis. Though, I earlier little knowledge about the topics, I went thoroughly through the Redis documentation and googled more about Redis.

I also had to go through the retask documentation. Finally, I went once again went through darkserver code and created diagrams, this will me helping out the solve out the task and helping me to know where to hack the code to get the work running.

It’s better later than never. It’s been two week since the Google Summer of Code 2013 results were announced and I am glad to say that I got selected this year.

I will be working on Darkserver Improvment under Fedora. One can see a draft of my proposal here. My mentor is Kushal Das and i am really helpful for helping me out in the whole process both in code and application.

This year thought to wish “Happy New Year” in different style. So, here is a Brainfuck program to wish you the same. 🙂

# Written by Sayan Chowdhury

+++++ +++++
    > +++++ ++
    > +++++ +++
    > +++++ ++++
    > +++++ +++++ 
    > +++++ +++++ +
    > +++++ +++++ ++
    > +++
    > +
    <<<<<<<< -

> ++ .
>>> --- .
> ++ .
> + .
> ++ .

<<<<< -- .
>> ++++ .
>> -- .
> .
<<<< - .
> .
---- .
> ++ .
>>> .

For last few days, I was working on implementing a feature where the users who log in through the social log in methods in Transifex can choose a username, when logging in for the first time. Logically, I had to add in a step in the transifex social_auth_pipeline to display the user with a form to enter the desired username, before the user is created. django-social-auth provides us with Partial Pipeline where one can halt the pipeline process and ask the user for more data, and then resume. As mentioned in the docs:

It’s possible to cut the pipeline process to return to the user asking for more data and resume the process later, to accomplish this add the entry social_auth.backends.pipeline.misc.save_status_to_session (or a similar implementation) to the pipeline setting before any entry that returns an HttpResponse instance

The example below can be used implement partial pipeline


After the pipeline resumes, by default the pipeline is resumed from the next entry after save_status_to_session but this can be modified by setting the following setting to the import path of the pipeline entry to resume processing

SOCIAL_AUTH_PIPELINE_RESUME_ENTRY = 'social_auth.backends.pipeline.misc.save_status_to_session'

This comes handy when the user inputs an invalid/duplicate data and one need to cut the pipeline process again. After implementing this feature, I submitted the patch to upstream and hope to get it accepted.


%d bloggers like this: