Commit graph

69 commits

Author SHA1 Message Date
Pierre Mizrahi
51358d13c4 mongo 6: fix issue on collections with '.'
Collection names are allowed to have a '.' in their name, db
names aren't (see
https://www.mongodb.com/docs/manual/reference/limits/#naming-restrictions)

This codes changes the logic to extract the collection
name form a FullConnecton string by stripping until the first
dot, and provides a test case.
2023-05-29 11:48:05 +02:00
Pierre Mizrahi
995087e9a0 repair single document upserts when using OP_MSG
780df80cfc introduces support for the
OP_MSG protocol. Unfortunately, the upsert and multi options of the
update command still use flagBits to communicate the options, whereas
they must be provided directly into the command document,
alongside the "q" and "v" fields.

This commit:
 - introduces a test for a single-document upsert that, if isolated,
   succeeds against the reference MongoDB 3.6 container, but fails
   against an official 6.0 image.
 - provides a patch that sets the appropriate options.

The test is not perfect as the upsert operation is inherently racy and
this difficult to test. A comfortable threadDelay has been inserted as
a workaround to accomodate for medium workloads.
2023-02-13 14:05:56 +01:00
kfiz
780df80cfc
Make current driver compatible with the OP_MSG protocol (#137)
* Make current driver compatible with the OP_MSG protocol

Starting with mongodb v6 the OP_MSG protocol is the only accepted message protocol that is accepted by mongodb.
All prior protocols are deprecated. This commit implements the protocol keeping the current client facing API intact.

See:
https://github.com/mongodb/specifications/blob/master/source/message/OP_MSG.rst
https://medium.com/@asayechemeda/communicating-with-mongodb-using-tcp-sockets-521490f981f

Co-authored-by: Doro Rose <doroerose@gmail.com>
2022-10-26 21:09:24 -07:00
why-not-try-calmer
727bdef020 Cleaning, updating codebase to avoid warnings/infos
Updating to avoid deprecated Producer/Consumer from `conduit`.
Removed unused imports.
Removing superfluous brackets.
Simplifying a few function bodies with catMaybe, fromMaybe, mapMaybe.
2022-06-18 13:33:55 +02:00
why-not-try-calmer
410fdd587a Added "timeouts" as one type of events users should handle as part of their use of Pipeline. 2022-02-03 08:46:16 +01:00
why-not-try-calmer
6ad28bc0a6 Added a clarificatory remark and one example to openReplicaSet'
Some new users might be put off by the lack of a array of choice between connection methods
that this package offers. This remark and the associated examples are a first attempt to make the package easier to start with.
--
2022-01-15 16:20:27 +01:00
Andrea Condoluci
55ca81a474 Undo some inessential changes 2020-04-01 16:53:37 +02:00
Andrea Condoluci
b42710839a Improve documentation 2020-04-01 15:11:17 +02:00
Victor Denisov
73cae15466 Open ReplicaSets over TLS 2020-01-01 20:34:31 -08:00
Victor Denisov
30ef4e1570 Fix compilation error 2020-01-01 20:33:37 -08:00
Victor Denisov
7b5d85cca8 Unmask the forked thread in new pipeline 2019-12-31 15:44:05 -08:00
Neil Cowburn
bcfbcc2918
Add support for opening replica sets using v3.6-style connection strings 2019-11-19 11:21:13 +00:00
Neil Cowburn
d334d889ee
Add support for opening replica sets over TLS 2019-11-01 18:33:09 +00:00
Arnaud Spiwack
bd25f8bee3 Unmask the forked thread in newPipeline
The `newPipeline` function, used as part of `connect`, forks a
listener thread. Before this commit, the thread is forked with
`forkFinally`, where the thread action is run in the same mask as the
parent thread. The thread is then killed by a `killThread` when
closing a connection.

This is typically not a problem if the mask is “masked” (or,
obviously, “unmasked”), because the listener is generally blocked on a
channel at some time or other, and therefore will accept the
asynchronous exception thrown by `killThread`, and terminate.

However, if the mask is “masked uninterruptible”, then the listener
definitely doesn't receive asynchronous exceptions, and the
`killThread` calls hangs, and never returns.

One should probably never call `connect` in a “masked uninterruptible”
action. However, it sounds better to protect the mongoDB library
against the user accidentally doing so than to add a big warning
saying that calling `connect` in “masked uninterruptible” will cause
the program to hang down the line.

Therefore, this commit uses `forkIOWithUnmask`, in order to run the
thread action always in an “unmasked” state. In which case we can be
sure that we can always kill the listener thread regardless of the
client code.
2019-10-29 09:49:44 +01:00
horus
4d1b2a0108 Add support for Unix domain socket connection
Update corresponding parser in readHostPortM
Update showHostPort
2019-09-11 14:08:22 +08:00
Scott Fleischman
f84cc03517 Add numeric instances that network's PortNumber has.
In particular this allows you to use `fromIntegral` without having to add the newtype wrapper. This can help existing code move away from importing and referencing the PortID type altogether.
2019-05-30 11:33:13 -07:00
Scott Fleischman
996d3e196b Use same version check as in cabal file; fix typo in comment. 2019-05-30 10:28:23 -07:00
Scott Fleischman
17287b5556 Use network's connectTo when available. 2019-05-30 10:02:06 -07:00
Scott Fleischman
21cf023854 Add module Database.MongoDB.Internal.Network.
Add flag imitating bson package PR for network changes.
Add stack files for compilation checking.

Both ghc86 builds work. Still need to fix ghc84 and under builds with older network code.
2019-05-29 18:02:37 -07:00
Scott Fleischman
c03e1ed746 Use Control.Monad.Except instead of Control.Monad.Error.
Due to the following warning:
"Module ‘Control.Monad.Error’ is deprecated:
  Use "Control.Monad.Except" instead"
2019-05-29 16:57:51 -07:00
Victor Denisov
9e0781dff5 Use stm channels 2018-04-28 16:12:11 -07:00
Victor Denisov
dd6c5057f5 Add modifyMVar for Action monad 2017-05-08 22:48:13 -07:00
Victor Denisov
746e670bf0 Drain remaining var in response queue 2016-10-30 00:08:40 -07:00
Victor Denisov
04e5dd3248 Return error if listening thread is closed 2016-10-30 00:08:40 -07:00
Victor Denisov
7fc095725f Make psend's argument message strict (#55)
If the message argument can't be evaluated successfully
strict modifier will keep those errors outside of
psend invocation. Psend will catch only actual IO exceptions.
2016-06-02 07:46:24 -07:00
Victor Denisov
a632e8ff55 Collect size restrictions from the server 2016-05-26 23:03:55 -07:00
Victor Denisov
2ba71ca277 Retrieve server data on connection 2016-05-21 13:32:04 -07:00
Victor Denisov
e38ec59d1e Move Tls module to Transport 2016-05-02 22:05:02 -07:00
Victor Denisov
89ee88e67c Rename Internal.Connection module to Transport 2016-05-02 21:30:00 -07:00
Victor Denisov
ccd6727ab4 Use conventional types for Tls.Connect 2016-05-01 19:24:40 -07:00
Victor Denisov
a4e5726e1e Clean up redundant warnings 2016-05-01 19:11:02 -07:00
Victor Denisov
655f4b90bc Rename readExactly to read 2016-05-01 19:05:51 -07:00
Victor Denisov
73dfdb0b7f Remove IOStream from Internal.Protocol 2016-05-01 18:17:22 -07:00
Victor Denisov
c011b1a23c Move content of System.IO.Pipeline to Internal.Protocol 2016-05-01 17:34:06 -07:00
Victor Denisov
f956cb2623 Incorporate Tls implementation 2016-05-01 16:15:08 -07:00
Victor Denisov
19e631c9f4 Implement readExactly using hGet 2016-04-30 14:08:19 -07:00
Victor Denisov
494bdcbe56 Add tls implementation 2016-04-30 14:08:19 -07:00
Victor Denisov
68ed7beb56 Remove unused writeLazy 2015-08-31 18:04:00 -07:00
Victor Denisov
e45d9329e9 Address performance issues with insert
Compile notices and request into one strict string for performance
boost.
2015-08-29 22:37:05 -07:00
Mikkel Christiansen
f69440d7fa Remove applicative import warnings in GHC 7.10.1. 2015-05-15 15:26:34 +02:00
Greg Weber
98bcc2dfe8 abstract connection interface
rebase #13 to master
2015-03-05 11:21:58 -08:00
Michael Snoyman
a43c94f977 Remove MonadIO' 2013-12-27 13:39:22 +02:00
Michael Snoyman
caab81a54e Get rid of usage of ErrorT 2013-12-26 17:23:02 +02:00
Michael Snoyman
756c9181cb Replace hard tabs with spaces 2013-12-26 16:57:33 +02:00
Fedor Gogolev
46b3f1f3fa Support for network 2.4.1 2013-01-21 02:08:20 +04:00
Michael Snoyman
681f9f875f GHC 7.6 support 2012-09-10 20:25:45 +03:00
Fedor Gogolev
dd6a3010f6 Cleaned up imports 2012-06-10 23:47:14 +04:00
Fedor Gogolev
17f528e835 Use text instead of compact-string-fix 2012-05-08 19:13:25 +04:00
Greg Weber
b706780844 use -fno-warn-orphans 2012-02-29 11:35:55 -08:00
Andrew Miller
d3f54922cc Add routedHost as an alternative to primary / secondaryOk that lets the user supply their own sort function. This is useful for applications like preferentially connecting to the host or secondary that is geographically the closest. 2012-02-12 17:34:07 +13:00