Giter VIP home page Giter VIP logo

de.flapdoodle.embed.mongo's People

Contributors

adamretter avatar arturobernalg avatar bernermic avatar bertramn avatar callegustafsson avatar canyaman avatar chrbayer84 avatar freemo avatar gitsnaf avatar harley84 avatar iabudiab avatar jirutka avatar jochenberger avatar joelittlejohn avatar julianladisch avatar loki-afro avatar martin-g avatar matlockx avatar mclarkdev avatar michaelmosmann avatar mrmanc avatar pinguet62 avatar rdpeake avatar richardwilly98 avatar roberttaylor426 avatar ruannunes avatar santeriv avatar scottbessler avatar shollander avatar smecsia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

de.flapdoodle.embed.mongo's Issues

EmbeddedMongo builds failing behind a proxy

Hi
I am trying to use EMbedMongo behind a proxy server. I am running a gradle build and the build fails because embed mongo connects to the Mongo download URL and we are behind the organization firewall. I tried adding a proxy server property to my gradle build and the build still fails.

Here is the error :

Jan 16, 2013 12:32:29 PM de.flapdoodle.embed.process.runtime.Starter prepare
SEVERE: start
java.net.SocketException: Unexpected end of file from server
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:774)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:771)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
    at de.flapdoodle.embed.process.store.Downloader.download(Downloader.java:74)
    at de.flapdoodle.embed.process.runtime.Starter.checkDistribution(Starter.java:56)
    at de.flapdoodle.embed.mongo.MongodStarter.checkDistribution(MongodStarter.java:56)
    at de.flapdoodle.embed.process.runtime.Starter.prepare(Starter.java:68)
    at de.flapdoodle.embed.process.runtime.Starter$prepare.call(Unknown Source)

Is there a way to avoid the call?

I am using the version 1.2.8 fetched via the gradle dependencies.

Amit

Temporary Directory is not being removed at shutdown

Hi Michael,

Temporary database dirs created by MongodProcess are not being deleted at shutdown.

This is due to an incorrect overriding of method onBeforeProcess(IRuntimeConfig). This method is called from the parent constructor (AbstractProcess) and sets the value of field dbDirIsTemp, but this value is then overridden by the the instance initializer in class MongodProcess (boolean dbDirIsTemp=false).

I think that the problem can be easily solved by replacing

boolean dbDirIsTemp=false;

with

boolean dbDirIsTemp;

But more generally, I would advise you to change the design of AbstractProcess: it is wrong to call overridable methods from constructors. See http://stackoverflow.com/questions/3404301/whats-wrong-with-overridable-method-calls-in-constructors.

Provide a java.util.logging config

Can a static version of the runtime config say RuntimeConfig.JAVA_UTIL_LOGGING_CONFIG be provided so I can eliminate the following code?

    // Get open port
    final ServerSocket socket = new ServerSocket(0);
    port = socket.getLocalPort();
    socket.close();

    // create runtime
    final Logger logger = Logger.getLogger("de.flapdoodle.embedmongo");
    final RuntimeConfig config = new RuntimeConfig();
    config.setMongodOutputConfig(new MongodProcessOutputConfig(Processors
            .logTo(logger, Level.INFO), Processors.logTo(logger,
            Level.SEVERE), Processors.logTo(logger, Level.FINE)));
    config.setProgressListener(new IProgressListener() {

        @Override
        public void done(final String label) {
        }

        @Override
        public void info(final String label, final String message) {
        }

        @Override
        public void progress(final String label, final int percent) {
        }

        @Override
        public void start(final String label) {
        }
    });

    final MongoDBRuntime runtime = MongoDBRuntime.getInstance(config);

to

    final MongoDBRuntime runtime = MongoDBRuntime.getInstance(RuntimeConfig.JAVA_UTIL_LOGGING_CONFIG);

NullPointerException when custom databaseDir is specified

embedmongo version: 1.19

It looks like there has been a regression here after the refactoring in MongodProcess. The getCommandLine method passes dbDir to Mongod#getCommandLine, however the dbDir field is not set if a custom database dir is being used, and this results in the following NullPointerException:

Caused by: java.lang.NullPointerException
    at de.flapdoodle.embed.mongo.runtime.Mongod.getCommandLine(Mongod.java:122)
    at de.flapdoodle.embed.mongo.MongodProcess.getCommandLine(MongodProcess.java:147)
    at de.flapdoodle.embed.mongo.MongodProcess.getCommandLine(MongodProcess.java:49)
    at de.flapdoodle.embed.process.runtime.AbstractProcess.<init>(AbstractProcess.java:65)
    at de.flapdoodle.embed.mongo.MongodProcess.<init>(MongodProcess.java:68)
    at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:50)
    at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:38)
    at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:76)
    ...

Based on how the old code operated, I guess that dbDir is intentionally not set, so that custom database directories are not deleted when the process is stopped. It might be time to make this explicit e.g. with a boolean field like isCustomDatabaseDir or isTemporaryDatabaseDir so that dbDir can always be set and this extra flag controls whether a delete is required.

OSX Firewall

Hi,

I didn't know where else to put this, so here it goes.

Every time I run a test on my OSX machine a popup comes up and asks if mongod is allowed "to accept incoming network connections".

I don't want to disable my firewall and I cannot add the executable to the list of accepted applications (since the location of the file is always in a new temporary directory - which I don't want to change so I can run multiple instances in parallel).

So how do I solve this?

AbstractProcess.stopProcess() throws NPE if the process could not be created

the private field "process" is initialized in the C-tor of AbstractProcess
if the call ProcessControl.start(supportConfig(), processBuilder) throws exception, the catch block indirectly invokes the final stopProcess(), which attempts to stop the process, which is still null at this stage.

The NPE hides the original IOException, wher it all began.

Need to check process for null, before calling process.stop()

Shutdown issue

Hi,

my application runs as scheduled, when the task starts it extract mongodb and do the process and stop the mongodb process, this will repeat.

after certain amount of time we are getting the below issue.

Jun 13, 2012 2:48:02 PM de.flapdoodle.embedmongo.MongodProcess stop
WARNING: try to stop mongod
pid = 71331

Wed Jun 13 14:48:02 got kill or ctrl c or hup signal 2 (Interrupt), will terminate after current cmd ends
[mongod output] Jun 13, 2012 2:48:02 PM de.flapdoodle.embedmongo.runtime.ProcessControl executeCommandLine
INFO: execSuccess: true [kill, -2, 71025]

2012-06-13 14:48:03,166 ERROR [org.quartz.core.JobRunShell] - Job DEFAULT.jiraSprintReportJob threw an unhandled Exception:
java.lang.IllegalStateException: Couldn't kill mongod process!


Something bad happend. We couldn't kill mongod process, and tried a lot.
If you want this problem solved you can help us if you open a new issue on github.

Follow this link:
https://github.com/flapdoodle-oss/embedmongo.flapdoodle.de/issues

Thank you:)

at de.flapdoodle.embedmongo.runtime.ProcessControl.waitForProcessGotKilled(ProcessControl.java:126)
at de.flapdoodle.embedmongo.runtime.ProcessControl.stop(ProcessControl.java:62)
at de.flapdoodle.embedmongo.MongodProcess.stop(MongodProcess.java:107)
at com.comcast.cable.cds.merlin.tools.sprint.report.JiraSprintReportTask.mongoStop(JiraSprintReportTask.java:99)
at com.comcast.cable.cds.merlin.tools.sprint.report.JiraSprintReportTask.trigger(JiraSprintReportTask.java:65)
at com.comcast.cable.cds.merlin.tools.sprint.report.JiraSprintReportJob.executeInternal(JiraSprintReportJob.java:25)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

2012-06-13 14:48:03,168 ERROR [org.quartz.core.ErrorLogger] - Job (DEFAULT.jiraSprintReportJob threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.IllegalStateException: Couldn't kill mongod process!

Switch to use semver

Use semantic versioning (http://semver.org/) it is what the community is using.

So instead of 1.36 it should be 1.3.6

It's a minor thing, but it makes it alot easier to use 1.3.* or alike.

Race condition while starting new embedded Mongo instance

On my build server, which is a slow virtual machine, I often have failing builds with the following stacktrace:
java.io.IOException: Could not start mongod process
at de.flapdoodle.embed.mongo.MongodProcess.onAfterProcessStart(MongodProcess.java:139)
at de.flapdoodle.embed.process.runtime.AbstractProcess.(AbstractProcess.java:75)
at de.flapdoodle.embed.mongo.MongodProcess.(MongodProcess.java:70)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:50)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:38)
at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:96)
at de.flapdoodle.embed.mongo.tests.MongodForTestsFactory.(MongodForTestsFactory.java:82)
at de.flapdoodle.embed.mongo.tests.MongodForTestsFactory.with(MongodForTestsFactory.java:53)
at be.idevelop.opencom.DefaultAppConfigTest.setup(DefaultAppConfigTest.groovy:54)

Test code (nothing fancy):
factory = MongodForTestsFactory.with(Version.V2_2_0)
def mongo = factory.newMongo()

I can only reproduce this on my local machine when putting a breakpoint in the LogWatchStreamProcessor.process(..) method

So my wild guess here is that the log watch processor sometimes runs behind and the main thread decides the start up wasn't successful as the 'success' word didn't appear yet in the log. Perhaps the log stream isn't flushed fast enough.. Although, I noticed the gotResult & wait methods.. So, I'm still a bit puzzled why this code doesn't work.

Apart from that, I find it odd the log is checked to see if the start succeeded. Wouldn't it make more sense just trying to make a connection? Perhaps there are good reasons for not doing so (startup speed could be one), but it would avoid the multi thread complexity.

Kr,
Steven

Suggestion: option to dump mongo on the way out

When using this library for tests, I find myself, pretty frequently, wanted to know what was left in the DB when the test failed.

It would be somewhat delux, to that end to have an option to specify a pathname into which mongodump would be run before shutting down.

Race conditions between JobKillers

Currently two shutdown hooks are registered when launching Embedmongo:

  1. de.flapdoodle.embed.process.runtime.AbstractProcess.JobKiller
    1. Stops Mongod process
    2. Deletes temporary database dir
  2. de.flapdoodle.embed.process.runtime.Executable.JobKiller
    1. Deletes executable file

This creates a race condition: if Executable.JobKiller is executed first, it will throw an IOException because the executable file is locked by the Mongod process.

Currently the IOException is swallowed by Files.forceDelete(), which tries to delete the file again later. But this is not a proper way to deal with the race condition (see Issue 23).

I can see two ways to fix this:

  1. Use only one shutdown hook to perform all actions in the proper order;
  2. Make Executable.JobKiller wait on a lock or semaphore before trying to delete the executable file.

Support new MongoDB versions without requiring a new release

It would be nice if the API could support any valid version of Mongo without needing a new release and upgrade when new versions become available.

At the moment the API itself keeps a full, static list of supported versions which must be updated. Would it be possible to change this to simply try any version given and only reject the version number if the download produces a 404?

Please post build instructions in README.md

Thanks for releasing EmbedMongo.

It would be helpful if you could post some basic instructions in the README.md describing requirements and steps for building a JAR.

I see scripts for both Gradle and Maven in the root directory. I've attempted to build the project with both and have encountered many errors in the build process. One hour of troubleshooting later, I finally got a JAR. A few basic instructions would do much mitigate future problems for other users of your library.

mongos refactoring

@richardwilly98 i did some refactoring. Can you look at my changes if i did miss something? Can you test it, if its still working? Any comments welcome...

Provide a MongodConfig that automatically detects a free port

At the moment I do the following

    // Get open port
    final ServerSocket socket = new ServerSocket(0);
    port = socket.getLocalPort();
    socket.close();

            ....

    mongodExecutable = runtime.prepare(new MongodConfig(Version.V2_0_6,
            port, Network.localhostIsIPv6()));
    mongoProcess = mongodExecutable.start();

Can it be changed so I can do something like

    mongodExecutable = runtime.prepare(new MongodConfig(Version.V2_0_6);
    mongoProcess = mongodExecutable.start();

I am usually just listening on localhost for embedded testing anyway.

Support for replica set

I need to run unit tests using a Mongo replica set. It would be nice to have this feature.

Cannot start mongos and config server

Hi,

I tried to run config server and mongos but I got the following error during start of mongos process:

Could not start process
java.io.IOException: Could not start process
at de.flapdoodle.embed.mongo.AbstractMongoProcess.onAfterProcessStart(AbstractMongoProcess.java:66)
at de.flapdoodle.embed.process.runtime.AbstractProcess.(AbstractProcess.java:76)
at de.flapdoodle.embed.mongo.AbstractMongoProcess.(AbstractMongoProcess.java:52)
at de.flapdoodle.embed.mongo.MongosProcess.(MongosProcess.java:41)
at de.flapdoodle.embed.mongo.MongosExecutable.start(MongosExecutable.java:47)
at de.flapdoodle.embed.mongo.MongosExecutable.start(MongosExecutable.java:35)
at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:94)
at de.flapdoodle.embed.mongo.tests.MongosForTestsFactory.(MongosForTestsFactory.java:99)
at de.flapdoodle.embed.mongo.tests.MongosForTestsFactory.with(MongosForTestsFactory.java:57)

I used the following code to start config server(it started correctly):

def mongoConfigConfig = new MongodConfigBuilder()
.version(Version.Main.PRODUCTION)
.net(new Net(DefaultConfigPort, Network.localhostIsIPv6()))
.configServer(true)
.build()

val mongodExecutable: MongodExecutable = MongodStarter.getDefaultInstance().prepare(mongoConfigConfig(port))
val process = mongodExecutable.start()

and the following code to start mongos:
def mongosConfig(port: Int) = new MongosConfigBuilder()
.version(Version.Main.PRODUCTION)
.net(new Net(port, Network.localhostIsIPv6()))
.configDB(DefaultHost + ":" + DefaultConfigPort)
.build()

val mongosExecutable: MongosExecutable = MongosStarter.getInstance(new RuntimeConfigBuilder().defaults(Command.MongoS).build).prepare(mongosConfig(port))
val mongos = mongosExecutable.start()

Is there any problem with my configuration?

Regards,
Paweł

Files.forceDelete(File) should not call FileUtils.forceDeleteOnExit(File)

Currently de.flapdoodle.embed.process.io.file.Files.forceDelete(File) is calling org.apache.commons.io.FileUtils.forceDeleteOnExit(File), which in turn calls java.io.File.deleteOnExit().

This should be avoided. Reasons are:

  1. java.io.File.deleteOnExit() creates a shutdown hook for every file to be deleted, which can be very dangerous, see this thread for explanations.
  2. Sometimes, Files.forceDelete(File) gets executed inside a shutdown hook (by a JobKiller). With some unlucky timing, this could happen while the JVM is already executing shutdown hooks, in which case it throws the following exception:
Exception in thread "Thread-0" java.lang.IllegalStateException: Shutdown in progress
    at java.io.DeleteOnExitHook.add(DeleteOnExitHook.java:35)
    at java.io.File.deleteOnExit(File.java:939)
    ...

A better implementation would be to NOT call FileUtils.forceDeleteOnExit(File) at all :

public static boolean forceDelete(File fileOrDir) {
    boolean ret = false;
    try {
        if ((fileOrDir != null) && (fileOrDir.exists())) {
            FileUtils.forceDelete(fileOrDir);
            logger.info("Could delete " + fileOrDir);
            ret = true;
        }
    } catch (IOException e) {
        logger.severe("Could not delete " + fileOrDir);
    }
    return ret;
}

This is OK if race conditions between JobKillers are fixed (see Issue 22), as this method would then only fail in very uncommon situations.

Cannot run several JUnit4 style tests

Using v1.27 along with JUnit 4.0 style with annotations.

Code for Before and After methods:

private MongodProcess _mongod;
private Mongo _mongo;
private DB db;

@before

public void setUp() throws Exception {
    int port = 12345;
    _mongod = null;
    MongodConfig mongodConfig = new MongodConfig(Version.Main.V2_3, port,Network.localhostIsIPv6());
    RuntimeConfig runtimeConfig=new RuntimeConfig();
    runtimeConfig.setExecutableNaming(new UserTempNaming());
    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
    MongodExecutable mongodExecutable = runtime.prepare(mongodConfig);
    _mongod = mongodExecutable.start();
    _mongo = new Mongo("localhost", port);
    db = _mongo.getDB("mydb");
}

@After
public void tearDown() throws Exception {
    if (_mongod != null) {
        _mongod.stop();
    }
}

My JUnit test class contains 4 different test cases. Each of the tests succeeds when I run them one by one. When I try to run all 4 tests, the first will always succeed and the others will always fail, with the following exception:

de.flapdoodle.embed.process.exceptions.DistributionException: java.io.IOException: Could not create Tempfile: C:\Users\Peter\AppData\Local\Temp\extract-Peter-mongod.exe
at de.flapdoodle.embed.process.runtime.Starter.prepare(Starter.java:78)
at wecloud.TestMongoDataStore.setUp(TestMongoDataStore.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Could not create Tempfile: C:\Users\Peter\AppData\Local\Temp\extract-Peter-mongod.exe
at de.flapdoodle.embed.process.io.file.Files.createTempFile(Files.java:60)
at de.flapdoodle.embed.process.runtime.Starter.extractExe(Starter.java:89)
at de.flapdoodle.embed.mongo.MongodStarter.extractExe(MongodStarter.java:61)
at de.flapdoodle.embed.process.runtime.Starter.prepare(Starter.java:70)
... 25 more

Operating system is Windows 7, JDK 1.7, Eclipse Juno SR1. I have tried to place each test in a separate class but that did not seem to make any difference. If I run that as a suite, the first test succeeds but the remaining ones fail.

Any input, hints or ideas are most appreciated.

Kills eclipse process when teardown doesnt happen successfully and setup happens a 2nd time.

If I run this setUp() code

        MongoDBRuntime runtime = MongoDBRuntime.getDefaultInstance();
        _mongodExe = runtime.prepare(new MongodConfig(Version.V2_0, PROP_PORT, Network.localhostIsIPv6()));
        _mongod = _mongodExe.start();
        _mongo = new Mongo(PROP_HOST, PROP_PORT);
        _morphia = new Morphia();
        _morphia.mapPackage("dom");
        datastore = _morphia.createDatastore(_mongo, DATABASENAME);

twice, without running this tearDown() code in between:

        _mongod.stop();
        _mongodExe.cleanup();

it will kill the eclipse process.

This happens even in separate debug instances, so if I launch a test in debug mode and terminate the debug process before running tearDown() and then launch a new debug instance it will kill Eclipse when it runs setUp().

Stopping MongoDB should not be a WARNING

Stopping mongodb at the end of a test should be a normal event not a warning

Aug 05, 2012 6:39:56 PM de.flapdoodle.embedmongo.MongodProcess stop
WARNING: try to stop mongod

It should be at most INFO

Error during mongo db start on windows xp

I am using 1.2.6 version. I am getting the below error, while starting the mongo server.

My application is running on windowsXP.

Detect Distribution DONE
Check Distribution DONE
Extract C:\Documents and Settings\kcheruk.embedmongo\win32\mongodb-win32-i386-2.0.7.zip START
Extract C:\Documents and Settings\kcheruk.embedmongo\win32\mongodb-win32-i386-2.0.7.zip DONE
[mongod output]note: noprealloc may hurt performance in many applications
[mongod output] Thu Nov 08 15:36:27 versionCmpTest passed
[mongod output] Thu Nov 08 15:36:27 versionArrayTest passed
[mongod output] Thu Nov 08 15:36:27 BackgroundJob starting: DataFileSync
[mongod output] Thu Nov 08 15:36:27 shardObjTest passed
[mongod output] Thu Nov 08 15:36:27 shardKeyTest passed
[mongod output] Thu Nov 08 15:36:27 isInRangeTest passed
[mongod output] Thu Nov 08 15:36:27 [initandlisten] MongoDB starting : pid=3468 port=12345 dbpath=C:\DOCUME1\kcheruk\LOCALS1\Temp\embedmongo-db-75edec41-d657-4fe3-9b25-e7b02db4cc06 32-bit host=ushofpc320550
[mongod output] Thu Nov 08 15:36:27 [initandlisten]
[mongod output] Thu Nov 08 15:36:27 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
[mongod output] Thu Nov 08 15:36:27 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations
[mongod output] Thu Nov 08 15:36:27 [initandlisten] ** with --journal, the limit is lower
[mongod output] Thu Nov 08 15:36:27 [initandlisten]
[mongod output] Thu Nov 08 15:36:27 [initandlisten] db version v2.0.7, pdfile version 4.5
[mongod output] Thu Nov 08 15:36:27 [initandlisten] git version: 875033920e8869d284f32119413543fa475227bf
[mongod output] Thu Nov 08 15:36:27 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=0, build=6002, platform=2, service_pack='Service Pack 2') BOOST_LIB_VERSION=1_42
[mongod output] Thu Nov 08 15:36:27 [initandlisten] options: { dbpath: "C:\DOCUME1\kcheruk\LOCALS1\Temp\embedmongo-db-75edec41-d657-4fe3-9b25-e7b02db4cc06", noauth: true, nohttpinterface: true, nojournal: true, noprealloc: true, port: 12345, smallfiles: true, verbose: true }
[mongod output] Thu Nov 08 15:36:27 [initandlisten] Accessing: local for the first time
[mongod output] Thu Nov 08 15:36:27 [initandlisten] query local.system.namespaces query: { name: /^local.temp./ } reslen:20 0ms
[mongod output] Thu Nov 08 15:36:27 [initandlisten] enter repairDatabases (to check pdfile version #)
[mongod output] Thu Nov 08 15:36:27 [initandlisten] done repairDatabases
[mongod output] Thu Nov 08 15:36:27 BackgroundJob starting: snapshot
[mongod output] Thu Nov 08 15:36:27 BackgroundJob starting: ClientCursorMonitor
[mongod output] Thu Nov 08 15:36:27 BackgroundJob starting: PeriodicTask::Runner
[mongod output] Thu Nov 08 15:36:27 [initandlisten] ERROR: listen(): bind() failed errno:10048 Only one usage of each socket address (protocol/network address/port) is normally permitted. for socket: 0.0.0.0:12345
[mongod output] Thu Nov 08 15:36:27 [initandlisten] now exiting
[mongod output] Thu Nov 08 15:36:27 dbexit:
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: going to close listening sockets...
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: going to flush diaglog...
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: going to close sockets...
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: waiting for fs preallocator...
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: closing all files...
[mongod output] Thu Nov 08 15:36:27 [initandlisten] closeAllFiles() finished
[mongod output] Thu Nov 08 15:36:27 [initandlisten] shutdown: removing fs lock...
[mongod output] Thu Nov 08 15:36:27 dbexit: really exiting now
[mongod output]
Nov 8, 2012 3:36:27 PM de.flapdoodle.embed.mongo.MongodProcess stop
INFO: try to stop mongod
Nov 8, 2012 3:36:29 PM de.flapdoodle.embed.mongo.runtime.Mongod sendShutdown
WARNING: sendShutdown
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at de.flapdoodle.embed.mongo.runtime.Mongod.sendShutdown(Mongod.java:86)
at de.flapdoodle.embed.mongo.MongodProcess.sendStopToMongoInstance(MongodProcess.java:183)
at de.flapdoodle.embed.mongo.MongodProcess.stop(MongodProcess.java:162)
at de.flapdoodle.embed.process.runtime.AbstractProcess.(AbstractProcess.java:78)
at de.flapdoodle.embed.mongo.MongodProcess.(MongodProcess.java:70)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:50)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:38)
at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:96)
at embedmongo.AbstractMongoDBTest.setUp(AbstractMongoDBTest.java:25)
at junit.framework.TestCase.runBare(TestCase.java:132)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Nov 8, 2012 3:36:29 PM de.flapdoodle.embed.process.io.file.Files forceDelete
INFO: Could delete C:\DOCUME1\kcheruk\LOCALS1\Temp\embedmongo-db-75edec41-d657-4fe3-9b25-e7b02db4cc06

Simplify testing harness

Can the following be changed on the MongoProcess

  1. add a getHost(),getPort() method to allow test methods to access the host port without having to expose it to a higher namespace.
  2. add a newMongo() method that will create the Mongo object using the values of getHost() and getPort()

The first change should be present even if the second one is there in case the unit test involves using a driver aside from the standard MongoDB java client driver.

In addition to the above, assuming the other two issues I have raised are done. Please provide a method were I can do the following:

// Create executable and process using a random open port using the latest released version.  Optionally provide a constructor parameter that would contain the version number.
MongoTestingUtility utility = new MongoTestingUtility();

// Create a new mongo object
Mongo mongo = utility.newMongo(); 

// Create a new mongoDB object (at this point we just want to test some random operations against a random database)
DB db = utility.newMongoDB();    // would be equivalent to mongo.getDB(UUID.randomUUID().toString())

// Closes the process and cleans up the executable
utility.shutdown();

TempDir not set in examples

If no tempDir ist set on ArtifactStoreBuilder, the following exception occurs:
RuntimeException: interface de.flapdoodle.embed.process.io.directories.IDirectory not set (AbstractEmbeddedBuilder.java:59)

This is missing in the examples in the readme. I'm using version 1.33.

feature request: npm module?

I know it's a little of a fantasy, and probably not possible (have no clue if you can have a non JS npm module...)
Would be nice to have an mpm module for in memory mongodb (or mongodb-ish) implementation
(good for cloud9 tests and playground needing mongodb)

Can I use a copy of Mongo sitting in a tarball?

Apologies for opening an issue, but I don't see any indication of a google group or a mailing list or anything.

We already manage copies of MongoDB, so 'all' I need is to deal with starting and stopping, or perhaps unpacking, starting, and stopping. Is this supported?

If you had a wiki I'd be happy to write this up one I learn.

Address family not supported by protocol

I get the following exception when I run embedmongo on our build machine running Gentoo Linux.

build   05-Jun-2013 14:46:01    Extract /var/atlassian/application-data/bamboo/.embedmongo/linux/mongodb-linux-x86_64-2.4.1.tgz START
build   05-Jun-2013 14:46:03    Extract /var/atlassian/application-data/bamboo/.embedmongo/linux/mongodb-linux-x86_64-2.4.1.tgz DONE
build   05-Jun-2013 14:46:04    [mongod output]note: noprealloc may hurt performance in many applications
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.052 versionArrayTest passed
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.052 BackgroundJob starting: DataFileSync
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.052 shardKeyTest passed
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.052 isInRangeTest passed
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.052 shardObjTest passed
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] MongoDB starting : pid=10945 port=37883 dbpath=/tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380 64-bit host=pluto
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] db version v2.4.1
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] git version: 1560959e9ce11a693be8b4d0d160d633eee75110
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] allocator: tcmalloc
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.059 [initandlisten] options: { dbpath: "/tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380", ipv6: true, noauth: true, nohttpinterface: true, nojournal: true, noprealloc: true, port: 37883, smallfiles: true, verbose: true }
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.060 [initandlisten] flushing directory /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.061 [initandlisten] opening db:  local
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.061 [initandlisten] enter repairDatabases (to check pdfile version #)
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.061 [initandlisten] done repairDatabases
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.061 BackgroundJob starting: ClientCursorMonitor
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.061 BackgroundJob starting: snapshot
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 BackgroundJob starting: TTLMonitor
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 BackgroundJob starting: PeriodicTask::Runner
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 [initandlisten] run command local.$cmd { create: "startup_log", size: 10485760, capped: true }
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 [initandlisten] create collection local.startup_log { create: "startup_log", size: 10485760, capped: true }
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 [FileAllocator] allocating new datafile /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380/local.ns, filling with zeroes...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 [FileAllocator] creating directory /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380/_tmp
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.062 [FileAllocator] flushing directory /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.090 [FileAllocator] flushing directory /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.091 [FileAllocator] done allocating datafile /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380/local.ns, size: 16MB,  took 0.027 secs
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.091 [FileAllocator] allocating new datafile /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380/local.0, filling with zeroes...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.119 [FileAllocator] flushing directory /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.119 [FileAllocator] done allocating datafile /tmp/embedmongo-db-4c2f2b24-fc2c-4dd8-add1-589030031380/local.0, size: 16MB,  took 0.028 secs
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.119 [initandlisten] allocExtent local.startup_log size 10485760 0
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.119 [initandlisten] New namespace: local.startup_log
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.120 [initandlisten] allocExtent local.system.namespaces size 5888 0
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.120 [initandlisten] New namespace: local.system.namespaces
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.120 [initandlisten] command local.$cmd command: { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0  reslen:37 58ms
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.120 [initandlisten] insert local.startup_log ninserted:1 keyUpdates:0  0ms
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.120 [initandlisten] fd limit hard:4096 soft:4096 max conn: 3276
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.121 [initandlisten] Assertion: 15863:listen(): invalid socket? errno:97 Address family not supported by protocol
build   05-Jun-2013 14:46:04    [mongod output] 0xdc7f71 0xd8963b 0xd89b7c 0xdaf680 0xdaf9b8 0x6d3ec9 0x6d4690 0x6d4bfd 0x6db770 0x6dd3c9 0x7f8ff3cf1474 0x6cd0f9 
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo15printStackTraceERSo+0x21) [0xdc7f71]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo11msgassertedEiPKc+0x9b) [0xd8963b]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod() [0xd89b7c]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo8Listener13_setupSocketsERKSt6vectorINS_8SockAddrESaIS2_EERS1_IiSaIiEE+0x610) [0xdaf680]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo8Listener13initAndListenEv+0xa8) [0xdaf9b8]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo6listenEi+0x1b9) [0x6d3ec9]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo14_initAndListenEi+0x6b0) [0x6d4690]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(_ZN5mongo13initAndListenEi+0x1d) [0x6d4bfd]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod() [0x6db770]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod(main+0x9) [0x6dd3c9]
build   05-Jun-2013 14:46:04    [mongod output]  /lib64/libc.so.6(__libc_start_main+0xec) [0x7f8ff3cf1474]
build   05-Jun-2013 14:46:04    [mongod output]  /tmp/extract-0cd7a422-9a9a-4b04-8cf0-da59e700db9emongod() [0x6cd0f9]
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.125 [initandlisten] exception in initAndListen: 15863 listen(): invalid socket? errno:97 Address family not supported by protocol, terminating
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 dbexit: 
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: going to close listening sockets...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] closing listening socket: 7
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: going to flush diaglog...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: going to close sockets...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: waiting for fs preallocator...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: closing all files...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] closeAllFiles() finished
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 [initandlisten] shutdown: removing fs lock...
build   05-Jun-2013 14:46:04    [mongod output] Wed Jun  5 14:46:04.126 dbexit: really exiting now

Any idea what's going on here?

failed to shutdown

I'm opening this based on the suggestion in the error log. Please note that we are only able to reproduce this on one machine consistently.

Stacktrace

java.lang.IllegalStateException: Couldn't kill mongod process!


Something bad happend. We couldn't kill mongod process, and tried a lot.
If you want this problem solved you can help us if you open a new issue.

Follow this link:
https://github.com/flapdoodle-oss/embedmongo.flapdoodle.de/issues

Thank you:)

at de.flapdoodle.embed.process.runtime.ProcessControl.waitForProcessGotKilled(ProcessControl.java:189)
at de.flapdoodle.embed.process.runtime.ProcessControl.stop(ProcessControl.java:81)
at de.flapdoodle.embed.process.runtime.AbstractProcess.stopProcess(AbstractProcess.java:109)
at de.flapdoodle.embed.mongo.AbstractMongoProcess.stop(AbstractMongoProcess.java:89)
at de.flapdoodle.embed.process.runtime.AbstractProcess.<init>(AbstractProcess.java:78)
at de.flapdoodle.embed.mongo.AbstractMongoProcess.<init>(AbstractMongoProcess.java:52)
at de.flapdoodle.embed.mongo.MongodProcess.<init>(MongodProcess.java:49)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:47)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:35)
at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:95)
at com.basistech.jug.test.mongodb.MongoServerResource.before(MongoServerResource.java:95)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:158)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:95)

Ability to configure mongod command line

at the moment (v1.17) it does not seem to be possible to configure the command line that mongod is started with. It would be very useful to me if it was possible to have full control over the mongod command line parameters.

Increase download read timeout

Downloader read timeout is hardcoded to 10,000
On windows machines it presents issues not allowing it to finish the download properly.
I would like to increase this value to 20,000 or allow external configuration of it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.