commit | 9b99d6a259259cf9e888086e4b61c5adf849ccb8 | [log] [tgz] |
---|---|---|
author | Ali Ghassemi <aghassemi@google.com> | Fri Oct 23 15:42:59 2015 -0700 |
committer | Ali Ghassemi <aghassemi@google.com> | Fri Oct 23 15:42:59 2015 -0700 |
tree | 7962346c9563d38c280f9861a5daec0c9bc37eb8 | |
parent | 541c338588fbac8d6652d1b47469a3b72b288591 [diff] |
mojo/syncbase: Fixing handle leaks and forcing strict mode for tests. We were leaking mojo handles for proxies that are created for Watch, Exec and Scan streams. These proxies are created so Go code can call into Dart and the handles are not tied to the client proxy that is used to call Go code from Dart and therefore they need to be tracked and closed manually and neither mojo nor generated mojom code knows about their existence. This CL introduces a UnclosedStubsManager which methods like Watch, Scan, Exec add their stubs to and remove it when they finish. Any stubs that are still open when SyncbaseClient.close() is called are then closed preventing handle leaks. This CL also refactors and bundles Proxy and UnclosedStubsManager into a single ClientContext that is passed from client to layers that need it. NOTE: Currently we can not actually test for leaks due to the bug https://github.com/domokit/mojo/issues/487 which is crashing the test runner when `app.close` is called. Without `app.close()` being called before checking for leaks, some handles will always leak. For now I have verified leaks are down to 2 which are unrelated to our code and are due to `app.close()` not being called but this is not good, and hopefully that bug gets fixes soon so we can enable the leak check. Also note that `reportLeakedHandles` does not work in non-strict mode so we were never actually testing for leaks. Change-Id: Ie00442bec5156fd1e8ecb8afb90a3479d66c7189
This project exposes Syncbase as a Mojo service.
Read the architecture proposal.
You must have the Mojo repo in $MOJO_DIR
.
This section only needs to be run once.
See the Mojo readme for more comprehensive instructions.
Install depot tools.
Install Goma.
Put the following in your .bashrc
:
# NOTE: Actual locations depend on where you installed depot_tools and # goma. export PATH=${PATH}:${HOME}/dev/depot_tools export GOMA_DIR=${HOME}/goma export MOJO_DIR=${HOME}/mojo
$ mkdir $MOJO_DIR && cd $MOJO_DIR # NOTE: This step takes about 10 min. $ fetch mojo --target_os=android,linux # NOTE: This step also takes about 10 min. Furthermore, the script uses # 'sudo', so you will need to enter your password. $ cd src && ./build/install-build-deps.sh # Or, to include Android deps as well: $ cd src && ./build/install-build-deps-android.sh
This updates the Mojo repo to HEAD, and builds the Mojo resources needed to compile Syncbase.
Run this while you grab your morning coffee.
Start by updating the repo.
$ cd $MOJO_DIR/src $ git checkout master $ git pull $ gclient sync
Compile for Linux. Built resources will be in $MOJO_DIR/src/out/Debug
$ ./mojo/tools/mojob.py gn $ ./mojo/tools/mojob.py build # NOTE: This can take up to 10 minutes.
Compile for Android. Built resources will be in $MOJO_DIR/src/out/android_Debug
$ ./mojo/tools/mojob.py gn --android $ ./mojo/tools/mojob.py build --android # NOTE: This can take up to 10 minutes.
To run Dart apps, you must install the Dart SDK.
Googlers: http://go/install-dart External: https://www.dartlang.org/downloads/
Run the tests:
make test
This will run all tests listed in the tests
file in the root directory of this repo.
The following command will run a single test file. This is useful when the full test suite hangs with no output.
$(MOJO_DIR)/src/mojo/devtools/common/mojo_run -v --enable-multiprocess --shell-path $(MOJO_DIR)/src/out/Debug/mojo_shell test/integration/<filename>