Skip to content

Commit c083ead

Browse files
committed
Use OP_MSG to kill cursors
1 parent 26862d3 commit c083ead

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

Database/MongoDB/Query.hs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1648,7 +1648,10 @@ nextBatch (Cursor fcol batchSize var) = liftDB $ modifyMVar var $ \dBatch -> do
16481648
(0, _) -> return (emptyBatch, resultDocs)
16491649
(_, Just 0) -> do
16501650
pipe <- asks mongoPipe
1651-
liftIOE ConnectionFailure $ P.send pipe [KillCursors [cid]]
1651+
let sd = P.serverData pipe
1652+
if maxWireVersion sd < opMsgOnlyWireVersion
1653+
then liftIOE ConnectionFailure $ P.send pipe [KillCursors [cid]]
1654+
else liftIOE ConnectionFailure $ P.sendOpMsg pipe [Kc (P.KillC (KillCursors [cid]) fcol)] (Just MoreToCome) []
16521655
return (emptyBatch, resultDocs)
16531656
(_, _) -> (, resultDocs) <$> getNextBatch
16541657

@@ -1710,11 +1713,14 @@ rest :: MonadIO m => Cursor -> Action m [Document]
17101713
rest c = loop (next c)
17111714

17121715
closeCursor :: MonadIO m => Cursor -> Action m ()
1713-
closeCursor (Cursor _ _ var) = liftDB $ modifyMVar var $ \dBatch -> do
1716+
closeCursor (Cursor fcol _ var) = liftDB $ modifyMVar var $ \dBatch -> do
17141717
Batch _ cid _ <- fulfill dBatch
17151718
unless (cid == 0) $ do
17161719
pipe <- asks mongoPipe
1717-
liftIOE ConnectionFailure $ P.send pipe [KillCursors [cid]]
1720+
let sd = P.serverData pipe
1721+
if maxWireVersion sd < opMsgOnlyWireVersion
1722+
then liftIOE ConnectionFailure $ P.send pipe [KillCursors [cid]]
1723+
else liftIOE ConnectionFailure $ P.sendOpMsg pipe [Kc (P.KillC (KillCursors [cid]) fcol)] (Just MoreToCome) []
17181724
return (return $ Batch (Just 0) 0 [], ())
17191725

17201726
isCursorClosed :: MonadIO m => Cursor -> Action m Bool

0 commit comments

Comments
 (0)