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
std::unique_ptr< MobileSession > getSession(OperationContext *opCtx)
Returns a smart pointer to a previously released session for reuse, or creates a new session.
Definition: mobile_session_pool.cpp:104
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
MobileDelayedOpQueue()
Definition: mobile_session_pool.cpp:50
~MobileSessionPool()
Definition: mobile_session_pool.cpp:100
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
bool _shuttingDown
Definition: mobile_session_pool.h:110
stdx::mutex _queueMutex
Definition: mobile_session_pool.h:59
void shutDown()
Transitions the pool to shutting down mode.
Definition: mobile_session_pool.cpp:145
MONGO_DISALLOW_COPYING(MobileSessionPool)
bool isEmpty()
Definition: mobile_session_pool.cpp:93
This class manages a SQLite database connection object.
Definition: mobile_session.h:43
MobileSessionPool(const std::string &path, std::uint64_t maxPoolSize=80)
Definition: mobile_session_pool.cpp:97
void releaseSession(MobileSession *session)
Returns a session to the pool for later reuse.
Definition: mobile_session_pool.cpp:135
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
std::uint64_t _curPoolSize
Definition: mobile_session_pool.h:109
SessionPool _sessions
Definition: mobile_session_pool.h:113
sqlite3 * _popSession_inlock()
Gets the front element from _sessions and then pops it off the queue.
Definition: mobile_session_pool.cpp:181
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
std::uint64_t _maxPoolSize
PoolSize is the number of open sessions associated with the session pool.
Definition: mobile_session_pool.h:108
AtomicBool _isEmpty
Definition: mobile_session_pool.h:58
void enqueueOp(std::string &opQuery)
Definition: mobile_session_pool.cpp:52