Since my last post, I’ve made considerable progress in the quest to make file I/O async in logger.js.
- I wrote some xpcshell tests for the log writing code, and tested it in a live Instantbird instance – it was good to go with a couple of minor mistakes in code.
- Log reading is now also async, and the Instantbird log viewer has been updated for the API changes.
- I’ve added error handling throughout. This is important because errors in Promises may be dropped to the floor if the Promise’s consumer doesn’t handle rejections, and especially in Promise chains where errors need to be propagated.
- I had to figure out how to pass a Promise through an XPCOM interface. Turns out the return type needs to be declared as “jsval”.
All of this has been tested with the Instantbird log viewer and everything seems to be working smoothly. Coming up next:
- The strategy I’m using for writing log files is to have an OS.File instance open and repeatedly append to it using write(). The file needs to be closed after arbitrary periods of inactivity.
- Tests! Now that log reading is async, I need to write tests for writing/reading a conversation.
- Other consumers of the imILogger API need to be updated (Thunderbird).
My next post will likely be when the items on the to-do list above have been crossed off. Until then, you can follow the progress of this effort on bug 955292.