31
31
filesystem_manager,
39
39
from ubuntuone import syncdaemon
40
40
import ubuntuone.platform
42
from ubuntuone.platform import event_logging
42
43
from ubuntuone.syncdaemon.states import StateManager, QueueManager
84
85
self.shares_dir_link = os.path.join(self.root_dir, shares_symlink_name)
85
86
self.data_dir = data_dir
86
87
self.partials_dir = partials_dir
88
self.tritcask_dir = os.path.join(self.data_dir, 'tritcask')
87
89
self.logger = logging.getLogger('ubuntuone.SyncDaemon.Main')
88
90
user_config = config.get_user_config()
89
91
if read_limit is None:
93
95
if not throttling_enabled:
94
96
throttling_enabled = user_config.get_throttling()
98
self.db = tritcask.Tritcask(self.tritcask_dir)
96
99
self.vm = volume_manager.VolumeManager(self)
97
self.fs = filesystem_manager.FileSystemManager(data_dir,
98
partials_dir, self.vm)
100
self.fs = filesystem_manager.FileSystemManager(
101
data_dir, partials_dir, self.vm, self.db)
99
102
self.event_q = event_queue.EventQueue(self.fs, ignore_files)
100
103
self.fs.register_eq(self.event_q)
129
132
self.action_q.content_queue.set_change_notification_cb(
130
133
self.external.change_notification)
131
self.zg_listener = event_logging.ZeitgeistListener(self.fs, self.vm)
132
self.event_q.subscribe(self.zg_listener)
135
self.eventlog_listener = None
136
self.start_event_logger()
133
137
self.logger.info("Using %r as root dir", self.root_dir)
134
138
self.logger.info("Using %r as data dir", self.data_dir)
135
139
self.logger.info("Using %r as shares root dir", self.shares_dir)
136
140
self.mark = task.LoopingCall(self.log_mark)
137
141
self.mark.start(mark_interval)
143
def start_event_logger(self):
144
"""Start the event logger if it's available for this platform."""
145
self.eventlog_listener = event_logging.get_listener(self.fs, self.vm)
146
if self.eventlog_listener:
147
self.event_q.subscribe(self.eventlog_listener)
139
149
def log_mark(self):
140
150
"""Log a "mark" that includes the current AQ state and queue size."""
141
151
self.logger.note("---- MARK (state: %s; queues: metadata: %d; content:"
142
" %d; hash: %d, fsm-cache: hit=%d miss=%d) ----",
152
" %d; hash: %d) ----",
143
153
self.state_manager, len(self.action_q.meta_queue),
144
len(self.action_q.content_queue), len(self.hash_q),
145
self.fs.fs.cache_hits, self.fs.fs.cache_misses)
154
len(self.action_q.content_queue), len(self.hash_q))
147
156
def wait_for_nirvana(self, last_event_interval=0.5):
148
157
"""Get a deferred that will fire on Nirvana.