Storage Engine API
mobile_session_pool.h
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include <queue>
32 #include <sqlite3.h>
33 #include <string>
34 #include <vector>
35 
36 #include "mongo/base/disallow_copying.h"
37 #include "mongo/db/operation_context.h"
39 #include "mongo/stdx/mutex.h"
40 
41 namespace mongo {
42 class MobileSession;
43 
47 class MobileDelayedOpQueue final {
49 
50 public:
52  void enqueueOp(std::string& opQuery);
53  void execAndDequeueOp(MobileSession* session);
54  void execAndDequeueAllOps(MobileSession* session);
55  bool isEmpty();
56 
57 private:
58  AtomicBool _isEmpty;
59  stdx::mutex _queueMutex;
60  std::queue<std::string> _opQueryQueue;
61 };
62 
66 class MobileSessionPool final {
68 
69 public:
70  MobileSessionPool(const std::string& path, std::uint64_t maxPoolSize = 80);
71 
73 
77  std::unique_ptr<MobileSession> getSession(OperationContext* opCtx);
78 
82  void releaseSession(MobileSession* session);
83 
88  void shutDown();
89 
90  // Failed drops get queued here and get re-tried periodically
92 
93 private:
97  sqlite3* _popSession_inlock();
98 
99  // This is used to lock the _sessions vector.
100  stdx::mutex _mutex;
101  stdx::condition_variable _releasedSessionNotifier;
102 
103  std::string _path;
104 
108  std::uint64_t _maxPoolSize = 80;
109  std::uint64_t _curPoolSize = 0;
110  bool _shuttingDown = false;
111 
112  using SessionPool = std::vector<sqlite3*>;
114 };
115 } // namespace mongo
stdx::condition_variable _releasedSessionNotifier
Definition: mobile_session_pool.h:101
MONGO_DISALLOW_COPYING(MobileDelayedOpQueue)
MobileDelayedOpQueue failedDropsQueue
Definition: mobile_session_pool.h:91
std::string _path
Definition: mobile_session_pool.h:103
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
MobileDelayedOpQueue()
Definition: mobile_session_pool.cpp:50
std::queue< std::string > _opQueryQueue
Definition: mobile_session_pool.h:60
This class manages a queue of operations delayed for some reason.
Definition: mobile_session_pool.h:47
stdx::mutex _queueMutex
Definition: mobile_session_pool.h:59
bool isEmpty()
Definition: mobile_session_pool.cpp:93
This class manages a SQLite database connection object.
Definition: mobile_session.h:43
This class manages a pool of open sqlite3* objects.
Definition: mobile_session_pool.h:66
std::vector< sqlite3 * > SessionPool
Definition: mobile_session_pool.h:112
stdx::mutex _mutex
Definition: mobile_session_pool.h:100
SessionPool _sessions
Definition: mobile_session_pool.h:113
void execAndDequeueOp(MobileSession *session)
Definition: mobile_session_pool.cpp:62
void execAndDequeueAllOps(MobileSession *session)
Definition: mobile_session_pool.cpp:87
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
AtomicBool _isEmpty
Definition: mobile_session_pool.h:58
void enqueueOp(std::string &opQuery)
Definition: mobile_session_pool.cpp:52