Merge lp:~ubuntu-branches/ubuntu/natty/ceph/natty-201103250159 into lp:ubuntu/natty/ceph

Proposed by James Westby
Status: Work in progress
Proposed branch: lp:~ubuntu-branches/ubuntu/natty/ceph/natty-201103250159
Merge into: lp:ubuntu/natty/ceph
Diff against target: 2653 lines (+2008/-64) (has conflicts)
37 files modified
.pc/.version (+1/-0)
.pc/applied-patches (+1/-0)
.pc/fix-mkcephfs-path.patch/src/Makefile.am (+772/-0)
configure (+37/-0)
configure.ac (+8/-0)
debian/ceph.install (+41/-0)
debian/ceph.lintian (+4/-0)
debian/ceph.lintian-overrides (+7/-0)
debian/ceph.logrotate (+9/-0)
debian/changelog (+24/-0)
debian/compat (+4/-0)
debian/control (+213/-0)
debian/copyright (+69/-0)
debian/libceph1-dev.install (+6/-0)
debian/libceph1.install (+5/-0)
debian/libcrush1-dev.install (+9/-0)
debian/libcrush1.install (+5/-0)
debian/librados1-dev.install (+13/-0)
debian/librados1.install (+5/-0)
debian/move_dbg_files.sh (+8/-0)
debian/rules (+68/-0)
debian/source/format (+4/-0)
src/.git_version (+4/-0)
src/client/Client.cc (+18/-0)
src/common/signal.cc (+163/-0)
src/include/ceph_strings.cc (+6/-0)
src/include/rados.h (+11/-0)
src/mds/MDS.cc (+6/-0)
src/mon/MDSMonitor.cc (+9/-0)
src/msg/Message.cc (+6/-0)
src/msg/Message.h (+4/-0)
src/os/FileStore.cc (+45/-0)
src/osd/OSD.cc (+50/-0)
src/osd/OSD.h (+4/-0)
src/osd/PG.cc (+328/-64)
src/osd/PG.h (+15/-0)
src/osd/ReplicatedPG.cc (+26/-0)
Text conflict in configure
Text conflict in configure.ac
Text conflict in debian/ceph.install
Text conflict in debian/ceph.lintian-overrides
Text conflict in debian/changelog
Text conflict in debian/compat
Text conflict in debian/control
Text conflict in debian/copyright
Text conflict in debian/libceph1-dev.install
Text conflict in debian/libceph1.install
Text conflict in debian/libcrush1-dev.install
Text conflict in debian/libcrush1.install
Text conflict in debian/librados1-dev.install
Text conflict in debian/librados1.install
Text conflict in debian/rules
Text conflict in debian/source/format
Text conflict in src/.git_version
Text conflict in src/client/Client.cc
Text conflict in src/common/signal.cc
Text conflict in src/include/ceph_strings.cc
Text conflict in src/include/rados.h
Text conflict in src/mds/MDS.cc
Text conflict in src/mon/MDSMonitor.cc
Text conflict in src/msg/Message.cc
Text conflict in src/msg/Message.h
Text conflict in src/os/FileStore.cc
Text conflict in src/osd/OSD.cc
Text conflict in src/osd/OSD.h
Text conflict in src/osd/PG.cc
Text conflict in src/osd/PG.h
Text conflict in src/osd/ReplicatedPG.cc
To merge this branch: bzr merge lp:~ubuntu-branches/ubuntu/natty/ceph/natty-201103250159
Reviewer Review Type Date Requested Status
Ubuntu branches Pending
Review via email: mp+55056@code.launchpad.net

Description of the change

The package history in the archive and the history in the bzr branch differ. As the archive is authoritative the history of lp:ubuntu/natty/ceph now reflects that and the old bzr branch has been pushed to lp:~ubuntu-branches/ubuntu/natty/ceph/natty-201103250159. A merge should be performed if necessary.

To post a comment you must log in.

Unmerged revisions

6. By Micah Gersten

debian/control: add Homepage

5. By Clint Byrum

* Removed .la files from libceph1-dev, libcrush1-dev and
  librados1-dev (per Debian policy v3.9.1 10.2).
* debian/watch: added watch file

4. By Clint Byrum

* New upstream release. (LP: #658670, LP: #684011)
* debian/patches/fix-mkcephfs.patch: dropped (applied upstream)
* Removed .la files from libcrush1-dev and librados1-dev (per Debian
  policy v3.9.1 10.2).
* debian/control: adding pkg-config as a build dependency
* debian/control: depend on libcrypto++-dev instead of libssl-dev

3. By Clint Byrum

New upstream release.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory '.pc'
=== added file '.pc/.version'
--- .pc/.version 1970-01-01 00:00:00 +0000
+++ .pc/.version 2011-03-28 07:08:46 +0000
@@ -0,0 +1,1 @@
12
02
=== added file '.pc/applied-patches'
--- .pc/applied-patches 1970-01-01 00:00:00 +0000
+++ .pc/applied-patches 2011-03-28 07:08:46 +0000
@@ -0,0 +1,1 @@
1fix-mkcephfs-path.patch
02
=== added directory '.pc/fix-mkcephfs-path.patch'
=== added directory '.pc/fix-mkcephfs-path.patch/src'
=== added file '.pc/fix-mkcephfs-path.patch/src/Makefile.am'
--- .pc/fix-mkcephfs-path.patch/src/Makefile.am 1970-01-01 00:00:00 +0000
+++ .pc/fix-mkcephfs-path.patch/src/Makefile.am 2011-03-28 07:08:46 +0000
@@ -0,0 +1,772 @@
1#
2# note: the old Makefile is at Makefile.old
3#
4
5AUTOMAKE_OPTIONS = gnu
6
7bin_PROGRAMS =
8sbin_PROGRAMS =
9bin_SCRIPTS = crun
10
11# monitor
12cmon_SOURCES = cmon.cc msg/SimpleMessenger.cc
13cmon_LDADD = libmon.a libcrush.a libcommon.a -lpthread -lm -lcrypto
14bin_PROGRAMS += cmon
15
16# osd
17cosd_SOURCES = cosd.cc msg/SimpleMessenger.cc objclass/class_debug.cc \
18 objclass/class_api.cc
19cosd_LDADD = libosd.a libos.a libcrush.a libcommon.a -ldl -lpthread -lm -lcrypto
20bin_PROGRAMS += cosd
21
22# mds
23cmds_SOURCES = cmds.cc msg/SimpleMessenger.cc
24cmds_LDADD = libmds.a libosdc.a libcrush.a libcommon.a -lpthread -lm -lcrypto
25bin_PROGRAMS += cmds
26
27# admin tools
28ceph_SOURCES = ceph.cc msg/SimpleMessenger.cc
29ceph_LDADD = libcrush.a libcommon.a -ledit -lpthread -lm -lcrypto
30cconf_SOURCES = cconf.cc
31cconf_LDADD = libcommon.a -lpthread -lm -lcrypto
32cauthtool_SOURCES = cauthtool.cc
33cauthtool_LDADD = libcommon.a -lpthread -lm -lcrypto
34bin_PROGRAMS += ceph cconf cauthtool
35
36monmaptool_SOURCES = monmaptool.cc
37monmaptool_LDADD = libcommon.a -lpthread -lm -lcrypto
38crushtool_SOURCES = crushtool.cc
39crushtool_LDADD = libcrush.a libcommon.a -lpthread -lm -lcrypto
40osdmaptool_SOURCES = osdmaptool.cc
41osdmaptool_LDADD = libcrush.a libcommon.a -lpthread -lm -lcrypto
42bin_PROGRAMS += monmaptool crushtool osdmaptool
43
44mount_ceph_SOURCES = mount/mount.ceph.c
45noinst_PROGRAMS = mount.ceph
46
47# synthetic client
48csyn_SOURCES = csyn.cc msg/SimpleMessenger.cc
49csyn_LDADD = libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm -lcrypto
50bin_PROGRAMS += csyn
51
52core: cmon cosd cmds ceph cconf monmaptool osdmaptool crushtool csyn
53
54
55# fuse targets?
56if WITH_FUSE
57cfuse_SOURCES = cfuse.cc msg/SimpleMessenger.cc client/fuse.cc client/fuse_ll.cc
58cfuse_LDADD = -lfuse libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm -lcrypto
59bin_PROGRAMS += cfuse
60
61#if WITH_DEBUG
62#fakefuse_SOURCES = fakefuse.cc msg/FakeMessenger.cc client/fuse.cc client/fuse_ll.cc
63#fakefuse_LDADD = -lfuse libmon.a libmds.a libosd.a libos.a \
64# libclient.a libosdc.a libcrush.a
65#bin_PROGRAMS += fakefuse
66#endif
67
68endif
69
70# debug targets?
71if WITH_DEBUG
72
73psim_SOURCES = psim.cc
74psim_LDADD = libcrush.a libcommon.a -lpthread -lm -lcrypto
75bin_PROGRAMS += psim
76
77testmsgr_SOURCES = testmsgr.cc msg/SimpleMessenger.cc
78testmsgr_LDADD = libcommon.a -lpthread -lm -lcrypto
79bin_PROGRAMS += testmsgr
80
81test_ioctls_SOURCES = client/test_ioctls.c
82bin_PROGRAMS += test_ioctls
83
84dumpjournal_SOURCES = dumpjournal.cc msg/SimpleMessenger.cc
85dumpjournal_LDADD = libosdc.a libcrush.a libcommon.a -lpthread -lm -lcrypto
86dupstore_SOURCES = dupstore.cc
87dupstore_LDADD = libos.a libcommon.a -lpthread -lm -lcrypto
88streamtest_SOURCES = streamtest.cc
89streamtest_LDADD = libos.a libcommon.a -lpthread -lm -lcrypto
90bin_PROGRAMS += dumpjournal dupstore streamtest
91
92test_trans_SOURCES = test_trans.cc
93test_trans_LDADD = libos.a libcommon.a -lpthread -lm -lcrypto
94bin_PROGRAMS += test_trans
95
96
97#fakesyn_SOURCES = fakesyn.cc msg/FakeMessenger.cc
98#fakesyn_LDADD = libmon.a libmds.a libosd.a libos.a \
99# libclient.a libosdc.a libcrush.a libcommon.a
100#bin_PROGRAMS += fakesyn
101
102endif
103
104
105##########
106BUILT_SOURCES =
107lib_LTLIBRARIES =
108
109# libcrush.so
110libcrush_la_SOURCES = \
111 crush/builder.c \
112 crush/mapper.c \
113 crush/crush.c \
114 crush/hash.c
115libcrush_la_CFLAGS = ${AM_CFLAGS}
116libcrush_la_CXXFLAGS = ${AM_CXXFLAGS}
117libcrush_la_LDFLAGS = -version-info 1:0:0 -export-symbols-regex 'crush_.*' -lm
118lib_LTLIBRARIES += libcrush.la
119
120# libceph
121libceph_la_SOURCES = \
122 libceph.cc \
123 client/Client.cc \
124 msg/SimpleMessenger.cc \
125 ${libcommon_a_SOURCES} \
126 ${libosdc_a_SOURCES}
127libceph_la_CFLAGS = ${AM_CFLAGS}
128libceph_la_CXXFLAGS= ${AM_CXXFLAGS}
129libceph_la_LIBADD = libcrush.la
130libceph_la_LDFLAGS = -version-info 1:0:0 -export-symbols-regex '^ceph_.*' -lpthread -lssl
131lib_LTLIBRARIES += libceph.la
132
133if WITH_DEBUG
134testceph_SOURCES = client/testceph.cc
135testceph_LDADD = libceph.la libcrush.la -lpthread -lm -lcrypto
136bin_PROGRAMS += testceph
137endif
138
139# librados
140librados_SOURCES = \
141 librados.cc \
142 msg/SimpleMessenger.cc \
143 osdc/Objecter.cc \
144 ${libcommon_a_SOURCES}
145librados_la_SOURCES = ${librados_SOURCES}
146librados_la_CFLAGS = ${AM_CFLAGS}
147librados_la_CXXFLAGS = ${AM_CXXFLAGS}
148librados_la_LIBADD = libcrush.la
149librados_la_LDFLAGS = -version-info 1:0:0 -export-symbols-regex '^rados_.*' -lpthread
150lib_LTLIBRARIES += librados.la
151
152librados_a_SOURCES = ${librados_SOURCES}
153librados_a_CFLAGS = ${AM_CFLAGS}
154librados_a_CXXFLAGS = ${AM_CXXFLAGS}
155
156rados_SOURCES = rados.cc
157rados_LDADD = librados.la -lpthread -lm -lcrypto
158bin_PROGRAMS += rados
159
160if WITH_DEBUG
161testrados_SOURCES = testrados.c
162testrados_LDADD = librados.la -lpthread -lm -lcrypto
163testradospp_SOURCES = testradospp.cc
164testradospp_LDADD = librados.la -lpthread -lm -lcrypto
165bin_PROGRAMS += testrados testradospp
166endif
167
168radosacl_SOURCES = radosacl.cc
169radosacl_LDADD = librados.la -lpthread -lm -lcrypto
170rbd_SOURCES = rbd.cc
171rbd_LDADD = librados.la -lpthread -lm -lcrypto
172bin_PROGRAMS += radosacl rbd
173
174if WITH_RADOSGW
175libradosgw_a_SOURCES = \
176 rgw/rgw_fs.cc \
177 rgw/rgw_rados.cc \
178 rgw/rgw_acl.cc \
179 rgw/rgw_user.cc \
180 rgw/rgw_access.cc \
181 rgw/rgw_op.cc \
182 rgw/rgw_rest.cc \
183 rgw/rgw_common.cc
184libradosgw_a_CFLAGS = ${AM_CFLAGS}
185# lib_LTLIBRARIES += libradosgw.a
186
187radosgw_SOURCES = rgw/rgw_main.cc
188radosgw_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lcrypto -lexpat -lpthread -lm
189radosgw_admin_SOURCES = rgw/rgw_admin.cc
190radosgw_admin_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lcrypto -lexpat -lpthread -lm
191bin_PROGRAMS += radosgw radosgw_admin
192endif
193
194if WITH_DEBUG
195testcrypto_SOURCES = testcrypto.cc
196testcrypto_LDADD = libcommon.a -lpthread -lm -lcrypto
197bin_PROGRAMS += testcrypto
198
199testkeys_SOURCES = testkeys.cc
200testkeys_LDADD = libmon.a libcommon.a -lpthread -lm -lcrypto
201bin_PROGRAMS += testkeys
202endif
203
204
205## rados object classes
206
207#libcls_crypto.so: cls_crypto.cc
208# ${CXX} -I. -fPIC -shared -g -o libcls_crypto.so -lcrypto cls_crypto.cc
209#BUILT_SOURCES += libcls_crypto.so
210
211#libcls_acl.so: cls_acl.cc
212# ${CXX} -I. -fPIC -shared -g -o libcls_acl.so cls_acl.cc
213#BUILT_SOURCES += libcls_acl.so
214
215# rbd: rados block device class
216libcls_rbd_la_SOURCES = cls_rbd.cc
217libcls_rbd_la_CFLAGS = ${AM_CFLAGS}
218libcls_rbd_la_CXXFLAGS= ${AM_CXXFLAGS}
219libcls_rbd_la_LDFLAGS = -version-info 1:0:0 -export-symbols-regex '.*__cls_.*' -lpthread
220
221radoslibdir = $(libdir)/rados-classes
222radoslib_LTLIBRARIES = libcls_rbd.la
223
224
225## hadoop client
226if WITH_HADOOPCLIENT
227JAVA_BASE = /usr/lib/jvm/java-6-sun
228libhadoopcephfs_la_SOURCES = client/hadoop/CephFSInterface.cc
229libhadoopcephfs_la_LIBADD = libceph.la
230libhadoopcephfs_la_CFLAGS = ${AM_CFLAGS}
231libhadoopcephfs_la_CXXFLAGS = ${AM_CXXFLAGS}
232libhadoopcephfs_la_LDFLAGS = -version-info 1:0:0 -export-symbols-regex 'hadoopcephfs_.*'
233lib_LTLIBRARIES += libhadoopcephfs.la
234endif
235
236
237# shell scripts
238editpaths = sed \
239 -e 's|@bindir[@]|$(bindir)|g' \
240 -e 's|@libdir[@]|$(libdir)|g' \
241 -e 's|@sysconfdir[@]|$(sysconfdir)|g' \
242 -e 's|@datadir[@]|$(pkgdatadir)|g' \
243 -e 's|@prefix[@]|$(prefix)|g'
244
245init-ceph mkcephfs cclass: init-ceph.in mkcephfs.in cclass.in Makefile
246 rm -f $@ $@.tmp
247 $(editpaths) '$(srcdir)/$@.in' >$@.tmp
248 chmod +x $@.tmp
249 chmod a-w $@.tmp
250 mv $@.tmp $@
251
252BUILT_SOURCES += init-ceph mkcephfs cclass
253
254##
255LDADD =
256
257
258AM_CXXFLAGS = -Wall -D__CEPH__ -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_THREAD_SAFE -rdynamic
259AM_CFLAGS = -Wall -D__CEPH__ -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_THREAD_SAFE -rdynamic
260AM_LDFLAGS =
261
262if WITH_LIBATOMIC
263AM_LDFLAGS += -latomic_ops
264endif
265
266noinst_LIBRARIES = \
267 libcommon.a libcrush.a \
268 libmon.a libmds.a libosdc.a libosd.a libclient.a \
269 libos.a librados.a libradosgw.a
270
271noinst_LIBRARIES += #libcephclient_so.a
272
273# extra bits
274EXTRA_DIST = verify-mds-journal.sh vstart.sh stop.sh \
275 crun ceph_common.sh init-ceph.in mkcephfs.in cclass.in cclsinfo make_version check_version
276
277install-data-local:
278 $(install_sh_SCRIPT) -m 0755 cclass $(DESTDIR)$(bindir)/cclass
279 $(install_sh_SCRIPT) -m 0755 cclsinfo $(DESTDIR)$(bindir)/cclsinfo
280 sh -c "if [ \"$(sbindir)\" = \"/usr/sbin\" ]; then mkdir -p $(DESTDIR)/sbin ; $(install_sh_SCRIPT) -m 0755 mount.ceph $(DESTDIR)/sbin/mount.ceph ; else mkdir -p $(DESTDIR)$(sbindir) ; $(install_sh_SCRIPT) -m 0755 mount.ceph $(DESTDIR)$(sbindir)/mount.ceph ; fi"
281 mkdir -p $(DESTDIR)$(sbindir)/ceph
282 $(install_sh_SCRIPT) -m 0755 mkcephfs $(DESTDIR)$(sbindir)/mkcephfs
283 mkdir -p $(DESTDIR)$(libdir)/ceph
284 $(install_sh_SCRIPT) -m 0755 ceph_common.sh $(DESTDIR)$(libdir)/ceph/ceph_common.sh
285 mkdir -p $(DESTDIR)$(sysconfdir)/ceph
286 $(install_sh_SCRIPT) -m 0600 sample.ceph.conf $(DESTDIR)$(sysconfdir)/ceph/sample.ceph.conf
287 $(install_sh_SCRIPT) -m 0755 fetch_config $(DESTDIR)$(sysconfdir)/ceph/sample.fetch_config
288 mkdir -p $(DESTDIR)$(includedir)/ceph
289 $(install_sh_SCRIPT) -m 0644 client/libceph.h $(DESTDIR)$(includedir)/ceph/libceph.h
290 mkdir -p $(DESTDIR)$(includedir)/rados
291 $(install_sh_SCRIPT) -m 0644 include/librados.h $(DESTDIR)$(includedir)/rados/librados.h
292 $(install_sh_SCRIPT) -m 0644 include/librados.hpp $(DESTDIR)$(includedir)/rados/librados.hpp
293 $(install_sh_SCRIPT) -m 0644 include/buffer.h $(DESTDIR)$(includedir)/rados/buffer.h
294 $(install_sh_SCRIPT) -m 0644 include/atomic.h $(DESTDIR)$(includedir)/rados/atomic.h
295 $(install_sh_SCRIPT) -m 0644 include/page.h $(DESTDIR)$(includedir)/rados/page.h
296 $(install_sh_SCRIPT) -m 0644 include/crc32c.h $(DESTDIR)$(includedir)/rados/crc32c.h
297 $(install_sh_SCRIPT) -m 0644 include/Spinlock.h $(DESTDIR)$(includedir)/rados/Spinlock.h
298 $(install_sh_SCRIPT) -m 0644 include/assert.h $(DESTDIR)$(includedir)/rados/assert.h
299 mkdir -p $(DESTDIR)$(includedir)/crush
300 $(install_sh_SCRIPT) -m 0644 crush/hash.h $(DESTDIR)$(includedir)/crush/hash.h
301 $(install_sh_SCRIPT) -m 0644 crush/crush.h $(DESTDIR)$(includedir)/crush/crush.h
302 $(install_sh_SCRIPT) -m 0644 crush/types.h $(DESTDIR)$(includedir)/crush/types.h
303 $(install_sh_SCRIPT) -m 0644 crush/mapper.h $(DESTDIR)$(includedir)/crush/mapper.h
304
305FORCE:
306.git_version: FORCE
307 ./check_version .git_version
308ceph_ver.h: .git_version
309 ./make_version .git_version ceph_ver.h
310
311ceph_ver.c: ceph_ver.h
312common/debug.cc: ceph_ver.h
313config.cc: ceph_ver.h
314
315
316
317# cleaning
318clean-local:
319 -rm *.so
320# -rm crush/*.cxx
321# -rm CrushWrapper.pm
322
323# libs
324libcommon_a_SOURCES = \
325 ceph_ver.c \
326 $(libcommon_files)
327
328# this list ommits the ceph_ver.c file
329libcommon_files = \
330 auth/AuthAuthorizeHandler.cc \
331 auth/AuthClientHandler.cc \
332 auth/AuthSupported.cc \
333 auth/cephx/CephxAuthorizeHandler.cc \
334 auth/cephx/CephxClientHandler.cc \
335 auth/cephx/CephxProtocol.cc \
336 auth/none/AuthNoneAuthorizeHandler.cc \
337 auth/Crypto.cc \
338 auth/ExportControl.cc \
339 auth/KeyRing.cc \
340 auth/RotatingKeyRing.cc \
341 common/LogClient.cc \
342 msg/Message.cc \
343 msg/msg_types.cc \
344 common/BackTrace.cc \
345 common/Logger.cc \
346 common/ClassLibrary.cc \
347 common/Clock.cc \
348 common/Timer.cc \
349 common/Finisher.cc \
350 common/sctp_crc32.c\
351 common/assert.cc \
352 common/dyn_snprintf.c \
353 common/WorkQueue.cc \
354 common/ConfUtils.cc \
355 common/MemoryModel.cc \
356 common/armor.c \
357 common/base64.c \
358 common/str_list.cc \
359 mon/MonMap.cc \
360 mon/MonClient.cc \
361 osd/OSDMap.cc \
362 mds/MDSMap.cc \
363 common/tls.cc \
364 common/common_init.cc \
365 common/buffer.cc \
366 common/debug.cc \
367 include/ceph_fs.cc \
368 include/ceph_hash.cc \
369 include/ceph_strings.cc \
370 include/ceph_frag.cc \
371 config.cc \
372 common/page.cc \
373 common/lockdep.cc
374
375libcrush_a_SOURCES = \
376 crush/builder.c \
377 crush/mapper.c \
378 crush/crush.c \
379 crush/hash.c
380
381libmon_a_SOURCES = \
382 auth/cephx/CephxKeyServer.cc \
383 auth/cephx/CephxServiceHandler.cc \
384 auth/AuthServiceHandler.cc \
385 mon/Monitor.cc \
386 mon/Paxos.cc \
387 mon/PaxosService.cc \
388 mon/OSDMonitor.cc \
389 mon/MDSMonitor.cc \
390 mon/MonmapMonitor.cc \
391 mon/PGMonitor.cc \
392 mon/LogMonitor.cc \
393 mon/ClassMonitor.cc \
394 mon/AuthMonitor.cc \
395 mon/Elector.cc \
396 mon/MonitorStore.cc \
397 mon/MonCaps.cc
398
399libmds_a_SOURCES = \
400 mds/MDS.cc \
401 mds/locks.c \
402 mds/journal.cc \
403 mds/Server.cc \
404 mds/MDCache.cc \
405 mds/Locker.cc \
406 mds/Migrator.cc \
407 mds/MDBalancer.cc \
408 mds/CDentry.cc \
409 mds/CDir.cc \
410 mds/CInode.cc \
411 mds/LogEvent.cc \
412 mds/MDSTable.cc \
413 mds/InoTable.cc \
414 mds/MDSTableClient.cc \
415 mds/MDSTableServer.cc \
416 mds/AnchorServer.cc \
417 mds/AnchorClient.cc \
418 mds/SnapServer.cc \
419 mds/snap.cc \
420 mds/SessionMap.cc \
421 mds/MDLog.cc
422
423libos_a_SOURCES = \
424 os/FileJournal.cc \
425 os/FileStore.cc \
426 os/JournalingObjectStore.cc
427
428libosd_a_SOURCES = \
429 osd/PG.cc \
430 osd/ReplicatedPG.cc \
431 osd/Ager.cc \
432 osd/OSD.cc \
433 osd/OSDCaps.cc \
434 common/ClassHandler.cc
435# osd/RAID4PG.cc
436
437libosdc_a_SOURCES = \
438 osdc/Objecter.cc \
439 osdc/ObjectCacher.cc \
440 osdc/Filer.cc \
441 osdc/Journaler.cc
442
443libclient_a_SOURCES = \
444 client/Client.cc \
445 client/SyntheticClient.cc \
446 client/Trace.cc
447
448# headers... and everything else we want to include in a 'make dist'
449# that autotools doesn't magically identify.
450noinst_HEADERS = \
451 auth/cephx/CephxAuthorizeHandler.h\
452 auth/cephx/CephxKeyServer.h\
453 auth/cephx/CephxProtocol.h\
454 auth/cephx/CephxClientHandler.h\
455 auth/cephx/CephxServiceHandler.h\
456 auth/none/AuthNoneAuthorizeHandler.h\
457 auth/none/AuthNoneClientHandler.h\
458 auth/none/AuthNoneServiceHandler.h\
459 auth/none/AuthNoneProtocol.h\
460 auth/Auth.h\
461 auth/AuthSupported.h\
462 auth/AuthClientHandler.h\
463 auth/AuthServiceHandler.h\
464 auth/AuthAuthorizeHandler.h\
465 auth/KeyRing.h\
466 auth/RotatingKeyRing.h\
467 auth/Crypto.h\
468 auth/ExportControl.h\
469 ceph_ver.h \
470 client/Client.h\
471 client/SyntheticClient.h\
472 client/Trace.h\
473 client/fuse.h\
474 client/fuse_ll.h\
475 client/ioctl.h\
476 client/libceph.h\
477 client/hadoop/CephFSInterface.h\
478 cls_acl.cc\
479 cls_crypto.cc\
480 cm.txt\
481 common/arch.h\
482 common/armor.h\
483 common/base64.h\
484 common/debug.h\
485 common/lockdep.h\
486 common/BackTrace.h\
487 common/ClassVersion.h\
488 common/Clock.h\
489 common/common_init.h\
490 common/Cond.h\
491 common/dyn_snprintf.h\
492 common/ClassHandler.h\
493 common/ConfUtils.h\
494 common/DecayCounter.h\
495 common/Finisher.h\
496 common/LogType.h\
497 common/Logger.h\
498 common/MemoryModel.h\
499 common/Mutex.h\
500 common/RWLock.h\
501 common/Semaphore.h\
502 common/Thread.h\
503 common/Throttle.h\
504 common/Timer.h\
505 common/tls.h\
506 common/WorkQueue.h\
507 common/LogClient.h\
508 config.h\
509 crush/CrushWrapper.h\
510 crush/CrushWrapper.i\
511 crush/builder.h\
512 crush/crush.h\
513 crush/grammar.h\
514 crush/hash.h\
515 crush/mapper.h\
516 crush/sample.txt\
517 crush/types.h\
518 fetch_config\
519 include/ClassLibrary.h\
520 include/Context.h\
521 include/CompatSet.h\
522 include/Distribution.h\
523 include/LogEntry.h\
524 include/Spinlock.h\
525 include/assert.h\
526 include/atomic.h\
527 include/bitmapper.h\
528 include/blobhash.h\
529 include/buffer.h\
530 include/byteorder.h\
531 include/ceph_frag.h\
532 include/ceph_fs.h\
533 include/ceph_hash.h\
534 include/color.h\
535 include/crc32c.h\
536 include/cstring.h\
537 include/encoding.h\
538 include/err.h\
539 include/error.h\
540 include/filepath.h\
541 include/frag.h\
542 include/hash.h\
543 include/intarith.h\
544 include/interval_set.h\
545 include/inttypes.h\
546 include/librados.h\
547 include/librados.hpp\
548 include/lru.h\
549 include/msgr.h\
550 include/nstring.h\
551 include/object.h\
552 include/page.h\
553 include/rangeset.h\
554 include/rados.h\
555 include/rbd_types.h\
556 include/statlite.h\
557 include/str_list.h\
558 include/triple.h\
559 include/tstring.h\
560 include/types.h\
561 include/uofs.h\
562 include/utime.h\
563 include/dlist.h\
564 include/elist.h\
565 include/xlist.h\
566 mds/locks.c\
567 mds/locks.h\
568 mds/Anchor.h\
569 mds/AnchorClient.h\
570 mds/AnchorServer.h\
571 mds/CDentry.h\
572 mds/CDir.h\
573 mds/CInode.h\
574 mds/Capability.h\
575 mds/InoTable.h\
576 mds/LocalLock.h\
577 mds/Locker.h\
578 mds/LogEvent.h\
579 mds/LogSegment.h\
580 mds/MDBalancer.h\
581 mds/MDCache.h\
582 mds/MDLog.h\
583 mds/MDS.h\
584 mds/MDSMap.h\
585 mds/MDSTable.h\
586 mds/MDSTableServer.h\
587 mds/MDSTableClient.h\
588 mds/Migrator.h\
589 mds/ScatterLock.h\
590 mds/Server.h\
591 mds/SessionMap.h\
592 mds/SimpleLock.h\
593 mds/SnapClient.h\
594 mds/SnapServer.h\
595 mds/events/ECommitted.h\
596 mds/events/EExport.h\
597 mds/events/EFragment.h\
598 mds/events/EImportFinish.h\
599 mds/events/EImportStart.h\
600 mds/events/EMetaBlob.h\
601 mds/events/EOpen.h\
602 mds/events/ESession.h\
603 mds/events/ESessions.h\
604 mds/events/ESlaveUpdate.h\
605 mds/events/EString.h\
606 mds/events/ESubtreeMap.h\
607 mds/events/ETableClient.h\
608 mds/events/ETableServer.h\
609 mds/events/EUpdate.h\
610 mds/mds_table_types.h\
611 mds/mdstypes.h\
612 mds/snap.h\
613 messages/MAuth.h\
614 messages/MAuthReply.h\
615 messages/MCacheExpire.h\
616 messages/MClass.h\
617 messages/MClassAck.h\
618 messages/MClientCaps.h\
619 messages/MClientCapRelease.h\
620 messages/MClientLease.h\
621 messages/MClientReconnect.h\
622 messages/MClientReply.h\
623 messages/MClientRequest.h\
624 messages/MClientRequestForward.h\
625 messages/MClientSession.h\
626 messages/MClientSnap.h\
627 messages/MDentryLink.h\
628 messages/MDentryUnlink.h\
629 messages/MDirUpdate.h\
630 messages/MDiscover.h\
631 messages/MDiscoverReply.h\
632 messages/MExportCaps.h\
633 messages/MExportCapsAck.h\
634 messages/MExportDir.h\
635 messages/MExportDirAck.h\
636 messages/MExportDirCancel.h\
637 messages/MExportDirDiscover.h\
638 messages/MExportDirDiscoverAck.h\
639 messages/MExportDirFinish.h\
640 messages/MExportDirNotify.h\
641 messages/MExportDirNotifyAck.h\
642 messages/MExportDirPrep.h\
643 messages/MExportDirPrepAck.h\
644 messages/MGenericMessage.h\
645 messages/MGetPoolStats.h\
646 messages/MGetPoolStatsReply.h\
647 messages/MHeartbeat.h\
648 messages/MInodeFileCaps.h\
649 messages/MLock.h\
650 messages/MLog.h\
651 messages/MLogAck.h\
652 messages/MMDSBeacon.h\
653 messages/MMDSCacheRejoin.h\
654 messages/MMDSLoadTargets.h\
655 messages/MMDSFragmentNotify.h\
656 messages/MMDSMap.h\
657 messages/MMDSResolve.h\
658 messages/MMDSResolveAck.h\
659 messages/MMDSSlaveRequest.h\
660 messages/MMDSTableRequest.h\
661 messages/MMonCommand.h\
662 messages/MMonCommandAck.h\
663 messages/MMonElection.h\
664 messages/MMonGetMap.h\
665 messages/MMonGlobalID.h\
666 messages/MMonMap.h\
667 messages/MMonObserve.h\
668 messages/MMonObserveNotify.h\
669 messages/MMonPaxos.h\
670 messages/MMonSubscribe.h\
671 messages/MMonSubscribeAck.h\
672 messages/MOSDAlive.h\
673 messages/MOSDBoot.h\
674 messages/MOSDFailure.h\
675 messages/MOSDMap.h\
676 messages/MOSDOp.h\
677 messages/MOSDOpReply.h\
678 messages/MOSDPGCreate.h\
679 messages/MOSDPGInfo.h\
680 messages/MOSDPGLog.h\
681 messages/MOSDPGNotify.h\
682 messages/MOSDPGQuery.h\
683 messages/MOSDPGRemove.h\
684 messages/MOSDPGTemp.h\
685 messages/MOSDPGTrim.h\
686 messages/MOSDPing.h\
687 messages/MOSDScrub.h\
688 messages/MOSDSubOp.h\
689 messages/MOSDSubOpReply.h\
690 messages/MPGStats.h\
691 messages/MPGStatsAck.h\
692 messages/MPing.h\
693 messages/MPoolOp.h\
694 messages/MPoolOpReply.h\
695 messages/MRemoveSnaps.h\
696 messages/MRoute.h\
697 messages/MForward.h\
698 messages/MStatfs.h\
699 messages/MStatfsReply.h\
700 messages/PaxosServiceMessage.h\
701 mon/AuthMonitor.h\
702 mon/ClassMonitor.h\
703 mon/Elector.h\
704 mon/LogMonitor.h\
705 mon/MDSMonitor.h\
706 mon/MonmapMonitor.h\
707 mon/MonCaps.h\
708 mon/MonClient.h\
709 mon/MonMap.h\
710 mon/Monitor.h\
711 mon/MonitorStore.h\
712 mon/OSDMonitor.h\
713 mon/PGMap.h\
714 mon/PGMonitor.h\
715 mon/Paxos.h\
716 mon/PaxosService.h\
717 mon/Session.h\
718 mon/mon_types.h\
719 mount/canonicalize.c\
720 mount/mtab.c\
721 msg/Dispatcher.h\
722 msg/FakeMessenger.h\
723 msg/Message.h\
724 msg/Messenger.h\
725 msg/SimpleMessenger.h\
726 msg/msg_types.h\
727 msg/tcp.cc\
728 msg/tcp.h\
729 objclass/objclass.h\
730 os/btrfs_ioctl.h\
731 os/BDBMap.h\
732 os/Fake.h\
733 os/FakeStoreBDBCollections.h\
734 os/FileJournal.h\
735 os/FileStore.h\
736 os/Journal.h\
737 os/JournalingObjectStore.h\
738 os/ObjectStore.h\
739 osbdb/OSBDB.h\
740 osd/Ager.h\
741 osd/OSD.h\
742 osd/OSDCaps.h\
743 osd/OSDMap.h\
744 osd/ObjectVersioner.h\
745 osd/PG.h\
746 osd/PGLS.h\
747 osd/RAID4PG.h\
748 osd/ReplicatedPG.h\
749 osd/osd_types.h\
750 osdc/rados_bencher.h\
751 osdc/Blinker.h\
752 osdc/Filer.h\
753 osdc/Journaler.h\
754 osdc/ObjectCacher.h\
755 osdc/Objecter.h\
756 rgw/rgw_access.h\
757 rgw/rgw_acl.h\
758 rgw/rgw_fs.h\
759 rgw/rgw_rados.h\
760 rgw/rgw_op.h\
761 rgw/rgw_rest.h\
762 rgw/rgw_common.h\
763 rgw/rgw_user.h\
764 sample.ceph.conf
765
766all_sources = $(cmon_SOURCES) $(ceph_SOURCES) $(cauthtool_SOURCES) $(monmaptool_SOURCES) \
767 $(crushtool_SOURCES) $(osdmaptool_SOURCES) $(cconf_SOURCES) $(mount_ceph_SOURCES) $(cmds_SOURCES) \
768 $(dumpjournal_SOURCES) $(cosd_SOURCES) $(dupstore_SOURCES) $(streamtest_SOURCES) $(csyn_SOURCES) \
769 $(testmsgr_SOURCES) $(cfuse_SOURCES) $(fakefuse_SOURCES) $(psim_SOURCES) \
770 $(libcrush_so_a_SOURCES) $(libcommon_files) $(libcrush_a_SOURCES) \
771 $(libmon_a_SOURCES) $(libmds_a_SOURCES) $(libos_a_SOURCES) $(libosd_a_SOURCES) \
772 $(libosdc_a_SOURCES) $(libclient_a_SOURCES)
0773
=== modified file 'configure'
--- configure 2011-02-25 15:17:26 +0000
+++ configure 2011-03-28 07:08:46 +0000
@@ -1,6 +1,10 @@
1#! /bin/sh1#! /bin/sh
2# Guess values for system-dependent variables and create Makefiles.2# Guess values for system-dependent variables and create Makefiles.
3<<<<<<< TREE
3# Generated by GNU Autoconf 2.61 for Ceph distributed file system 0.24.3.4# Generated by GNU Autoconf 2.61 for Ceph distributed file system 0.24.3.
5=======
6# Generated by GNU Autoconf 2.61 for Ceph distributed file system 0.24.2.
7>>>>>>> MERGE-SOURCE
4#8#
5# Report bugs to <Sage Weil <sage@newdream.net>>.9# Report bugs to <Sage Weil <sage@newdream.net>>.
6#10#
@@ -728,8 +732,13 @@
728# Identity of this package.732# Identity of this package.
729PACKAGE_NAME='Ceph distributed file system'733PACKAGE_NAME='Ceph distributed file system'
730PACKAGE_TARNAME='ceph'734PACKAGE_TARNAME='ceph'
735<<<<<<< TREE
731PACKAGE_VERSION='0.24.3'736PACKAGE_VERSION='0.24.3'
732PACKAGE_STRING='Ceph distributed file system 0.24.3'737PACKAGE_STRING='Ceph distributed file system 0.24.3'
738=======
739PACKAGE_VERSION='0.24.2'
740PACKAGE_STRING='Ceph distributed file system 0.24.2'
741>>>>>>> MERGE-SOURCE
733PACKAGE_BUGREPORT='Sage Weil <sage@newdream.net>'742PACKAGE_BUGREPORT='Sage Weil <sage@newdream.net>'
734743
735# Factoring default headers for most tests.744# Factoring default headers for most tests.
@@ -1422,7 +1431,11 @@
1422 # Omit some internal or obsolete options to make the list less imposing.1431 # Omit some internal or obsolete options to make the list less imposing.
1423 # This message is too long to be a string in the A/UX 3.1 sh.1432 # This message is too long to be a string in the A/UX 3.1 sh.
1424 cat <<_ACEOF1433 cat <<_ACEOF
1434<<<<<<< TREE
1425\`configure' configures Ceph distributed file system 0.24.3 to adapt to many kinds of systems.1435\`configure' configures Ceph distributed file system 0.24.3 to adapt to many kinds of systems.
1436=======
1437\`configure' configures Ceph distributed file system 0.24.2 to adapt to many kinds of systems.
1438>>>>>>> MERGE-SOURCE
14261439
1427Usage: $0 [OPTION]... [VAR=VALUE]...1440Usage: $0 [OPTION]... [VAR=VALUE]...
14281441
@@ -1493,7 +1506,11 @@
14931506
1494if test -n "$ac_init_help"; then1507if test -n "$ac_init_help"; then
1495 case $ac_init_help in1508 case $ac_init_help in
1509<<<<<<< TREE
1496 short | recursive ) echo "Configuration of Ceph distributed file system 0.24.3:";;1510 short | recursive ) echo "Configuration of Ceph distributed file system 0.24.3:";;
1511=======
1512 short | recursive ) echo "Configuration of Ceph distributed file system 0.24.2:";;
1513>>>>>>> MERGE-SOURCE
1497 esac1514 esac
1498 cat <<\_ACEOF1515 cat <<\_ACEOF
14991516
@@ -1610,7 +1627,11 @@
1610test -n "$ac_init_help" && exit $ac_status1627test -n "$ac_init_help" && exit $ac_status
1611if $ac_init_version; then1628if $ac_init_version; then
1612 cat <<\_ACEOF1629 cat <<\_ACEOF
1630<<<<<<< TREE
1613Ceph distributed file system configure 0.24.31631Ceph distributed file system configure 0.24.3
1632=======
1633Ceph distributed file system configure 0.24.2
1634>>>>>>> MERGE-SOURCE
1614generated by GNU Autoconf 2.611635generated by GNU Autoconf 2.61
16151636
1616Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,1637Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1624,7 +1645,11 @@
1624This file contains any messages produced by compilers while1645This file contains any messages produced by compilers while
1625running configure, to aid debugging if configure makes a mistake.1646running configure, to aid debugging if configure makes a mistake.
16261647
1648<<<<<<< TREE
1627It was created by Ceph distributed file system $as_me 0.24.3, which was1649It was created by Ceph distributed file system $as_me 0.24.3, which was
1650=======
1651It was created by Ceph distributed file system $as_me 0.24.2, which was
1652>>>>>>> MERGE-SOURCE
1628generated by GNU Autoconf 2.61. Invocation command line was1653generated by GNU Autoconf 2.61. Invocation command line was
16291654
1630 $ $0 $@1655 $ $0 $@
@@ -2444,7 +2469,11 @@
24442469
2445# Define the identity of the package.2470# Define the identity of the package.
2446 PACKAGE=ceph2471 PACKAGE=ceph
2472<<<<<<< TREE
2447 VERSION=0.24.32473 VERSION=0.24.3
2474=======
2475 VERSION=0.24.2
2476>>>>>>> MERGE-SOURCE
24482477
24492478
2450cat >>confdefs.h <<_ACEOF2479cat >>confdefs.h <<_ACEOF
@@ -23646,7 +23675,11 @@
23646# report actual input values of CONFIG_FILES etc. instead of their23675# report actual input values of CONFIG_FILES etc. instead of their
23647# values after options handling.23676# values after options handling.
23648ac_log="23677ac_log="
23678<<<<<<< TREE
23649This file was extended by Ceph distributed file system $as_me 0.24.3, which was23679This file was extended by Ceph distributed file system $as_me 0.24.3, which was
23680=======
23681This file was extended by Ceph distributed file system $as_me 0.24.2, which was
23682>>>>>>> MERGE-SOURCE
23650generated by GNU Autoconf 2.61. Invocation command line was23683generated by GNU Autoconf 2.61. Invocation command line was
2365123684
23652 CONFIG_FILES = $CONFIG_FILES23685 CONFIG_FILES = $CONFIG_FILES
@@ -23699,7 +23732,11 @@
23699_ACEOF23732_ACEOF
23700cat >>$CONFIG_STATUS <<_ACEOF23733cat >>$CONFIG_STATUS <<_ACEOF
23701ac_cs_version="\\23734ac_cs_version="\\
23735<<<<<<< TREE
23702Ceph distributed file system config.status 0.24.323736Ceph distributed file system config.status 0.24.3
23737=======
23738Ceph distributed file system config.status 0.24.2
23739>>>>>>> MERGE-SOURCE
23703configured by $0, generated by GNU Autoconf 2.61,23740configured by $0, generated by GNU Autoconf 2.61,
23704 with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"23741 with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
2370523742
2370623743
=== modified file 'configure.ac'
--- configure.ac 2011-02-25 15:17:26 +0000
+++ configure.ac 2011-03-28 07:08:46 +0000
@@ -3,7 +3,11 @@
33
4# Autoconf4# Autoconf
5AC_PREREQ(2.59)5AC_PREREQ(2.59)
6<<<<<<< TREE
6AC_INIT([Ceph distributed file system], [0.24.3], 7AC_INIT([Ceph distributed file system], [0.24.3],
8=======
9AC_INIT([Ceph distributed file system], [0.24.2],
10>>>>>>> MERGE-SOURCE
7 [Sage Weil <sage@newdream.net>],11 [Sage Weil <sage@newdream.net>],
8 [ceph])12 [ceph])
913
@@ -12,7 +16,11 @@
12AC_CANONICAL_TARGET16AC_CANONICAL_TARGET
1317
14# Automake18# Automake
19<<<<<<< TREE
15AM_INIT_AUTOMAKE(ceph, 0.24.3)20AM_INIT_AUTOMAKE(ceph, 0.24.3)
21=======
22AM_INIT_AUTOMAKE(ceph, 0.24.2)
23>>>>>>> MERGE-SOURCE
16AM_PROG_CC_C_O24AM_PROG_CC_C_O
17AM_PROG_LIBTOOL25AM_PROG_LIBTOOL
1826
1927
=== modified file 'debian/ceph.install'
--- debian/ceph.install 2011-02-25 15:17:26 +0000
+++ debian/ceph.install 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1usr/bin/ceph2usr/bin/ceph
2usr/bin/cephfs3usr/bin/cephfs
3usr/bin/cconf4usr/bin/cconf
@@ -33,3 +34,43 @@
33usr/share/man/man8/cclsinfo.834usr/share/man/man8/cclsinfo.8
34usr/share/man/man8/cdebugpack.835usr/share/man/man8/cdebugpack.8
35usr/share/ceph_tool/gui_resources/*36usr/share/ceph_tool/gui_resources/*
37=======
38usr/bin/ceph
39usr/bin/cconf
40usr/bin/cclass
41usr/bin/cclsinfo
42usr/bin/crushtool
43usr/bin/monmaptool
44usr/bin/osdmaptool
45usr/bin/csyn
46usr/bin/crun
47usr/bin/cmon
48usr/bin/cmds
49usr/bin/cosd
50usr/bin/cauthtool
51usr/bin/rados
52usr/bin/rbd
53usr/sbin/mount.ceph sbin/mount.ceph
54usr/sbin/mkcephfs sbin/mkcephfs
55usr/lib/ceph/ceph_common.sh
56usr/lib/rados-classes/*
57usr/share/doc/ceph/sample.ceph.conf
58usr/share/doc/ceph/sample.fetch_config
59usr/share/man/man8/cmon.8
60usr/share/man/man8/cmds.8
61usr/share/man/man8/cosd.8
62usr/share/man/man8/mkcephfs.8
63usr/share/man/man8/crun.8
64usr/share/man/man8/csyn.8
65usr/share/man/man8/crushtool.8
66usr/share/man/man8/osdmaptool.8
67usr/share/man/man8/monmaptool.8
68usr/share/man/man8/cconf.8
69usr/share/man/man8/ceph.8
70usr/share/man/man8/mount.ceph.8
71usr/share/man/man8/cauthtool.8
72usr/share/man/man8/rados.8
73usr/share/man/man8/rbd.8
74usr/share/man/man8/cclass.8
75usr/share/man/man8/cclsinfo.8
76>>>>>>> MERGE-SOURCE
3677
=== added file 'debian/ceph.lintian'
--- debian/ceph.lintian 1970-01-01 00:00:00 +0000
+++ debian/ceph.lintian 2011-03-28 07:08:46 +0000
@@ -0,0 +1,4 @@
1#
2# the rados classes should NOT be stripped.
3#
4ceph binary: unstripped-binary-or-object ./usr/lib/rados-classes/libcls_rbd.so.1.0.0
05
=== modified file 'debian/ceph.lintian-overrides'
--- debian/ceph.lintian-overrides 2011-02-25 15:17:26 +0000
+++ debian/ceph.lintian-overrides 2011-03-28 07:08:46 +0000
@@ -1,5 +1,12 @@
1<<<<<<< TREE
1#2#
2# the rados classes should NOT be stripped.3# the rados classes should NOT be stripped.
3#4#
4ceph: unstripped-binary-or-object usr/lib/rados-classes/libcls_rbd.so.1.0.05ceph: unstripped-binary-or-object usr/lib/rados-classes/libcls_rbd.so.1.0.0
56
7=======
8#
9# the rados classes should NOT be stripped.
10#
11ceph: unstripped-binary-or-object ./usr/lib/rados-classes/libcls_rbd.so.1.0.0
12>>>>>>> MERGE-SOURCE
613
=== added file 'debian/ceph.logrotate'
--- debian/ceph.logrotate 1970-01-01 00:00:00 +0000
+++ debian/ceph.logrotate 2011-03-28 07:08:46 +0000
@@ -0,0 +1,9 @@
1/var/log/ceph/*.log /var/log/ceph/stat/*.log {
2 rotate 7
3 daily
4 compress
5 sharedscripts
6 postrotate
7 invoke-rc.d ceph reload >/dev/null || service ceph reload >/dev/null
8 endscript
9}
010
=== modified file 'debian/changelog'
--- debian/changelog 2011-02-25 15:17:26 +0000
+++ debian/changelog 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1ceph (0.24.3-2) unstable; urgency=low2ceph (0.24.3-2) unstable; urgency=low
23
3 * Make Ceph Linux only and build on all Linux archs (closes: #614890).4 * Make Ceph Linux only and build on all Linux archs (closes: #614890).
@@ -36,3 +37,26 @@
36 * Initial release (Closes: #506040)37 * Initial release (Closes: #506040)
3738
38 -- Sage Weil <sage@newdream.net> Sun, 21 Nov 2010 15:22:21 -080039 -- Sage Weil <sage@newdream.net> Sun, 21 Nov 2010 15:22:21 -0800
40=======
41ceph (0.24.2-0ubuntu1) natty; urgency=low
42
43 [ Clint Byrum <clint@ubuntu.com> ]
44 * New upstream release. (LP: #658670, LP: #684011)
45 * debian/patches/fix-mkcephfs.patch: dropped (applied upstream)
46 * Removed .la files from libceph1-dev, libcrush1-dev and
47 librados1-dev (per Debian policy v3.9.1 10.2).
48 * debian/control: adding pkg-config as a build dependency
49 * debian/control: depend on libcrypto++-dev instead of libssl-dev
50 * debian/watch: added watch file
51
52 [ Micah Gersten <micahg@ubuntu.com> ]
53 * debian/control: add Homepage
54
55 -- Clint Byrum <clint@ubuntu.com> Sat, 12 Feb 2011 22:50:26 -0600
56
57ceph (0.21-0ubuntu1) maverick; urgency=low
58
59 * Initial release based on upstream package (LP: #607730)
60
61 -- Clint Byrum <clint@ubuntu.com> Fri, 30 Jul 2010 08:37:32 -0700
62>>>>>>> MERGE-SOURCE
3963
=== modified file 'debian/compat'
--- debian/compat 2011-02-25 15:17:26 +0000
+++ debian/compat 2011-03-28 07:08:46 +0000
@@ -1,1 +1,5 @@
1<<<<<<< TREE
1626
3=======
45
5>>>>>>> MERGE-SOURCE
26
=== modified file 'debian/control'
--- debian/control 2011-02-25 15:17:26 +0000
+++ debian/control 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1Source: ceph2Source: ceph
2Section: admin3Section: admin
3Priority: optional4Priority: optional
@@ -234,3 +235,215 @@
234 service.235 service.
235 .236 .
236 This package contains debugging symbols for radosgw.237 This package contains debugging symbols for radosgw.
238=======
239Source: ceph
240Section: admin
241Priority: optional
242Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
243XSBC-Original-Maintainer: Sage Weil <sage@newdream.net>
244Build-Depends: debhelper (>= 6.0.7~), autotools-dev, autoconf, automake, cdbs, libfuse-dev, libboost-dev, libedit-dev, libcrypto++-dev, libtool, libexpat1-dev, libfcgi-dev, libatomic-ops-dev, pkg-config
245Standards-Version: 3.9.1
246Homepage: http://ceph.newdream.net/
247
248Package: ceph
249Architecture: any
250Depends: ${shlibs:Depends}, ${misc:Depends}, libedit2, hdparm, binutils
251Recommends: ceph-fuse, libceph1, librados1, libcrush1, btrfs-tools
252Description: distributed storage and file system
253 Ceph is a distributed storage and network file system designed to provide
254 excellent performance, reliability, and scalability.
255 .
256 This package contains all server daemons and management tools for creating,
257 running, and administering a Ceph storage cluster.
258
259Package: ceph-dbg
260Architecture: any
261Section: debug
262Priority: extra
263Depends: ceph (= ${binary:Version}), ${misc:Depends}
264Description: debugging symbols for ceph
265 Ceph is a distributed storage and network file system designed to provide
266 excellent performance, reliability, and scalability.
267 .
268 This package contains the debugging symbols for ceph.
269
270Package: ceph-fuse
271Architecture: any
272Depends: ${shlibs:Depends}, ${misc:Depends}, libfuse2
273Recommends: fuse-utils
274Suggests: ceph
275Description: FUSE-based client for the Ceph distributed file system
276 Ceph is a distributed network file system designed to provide
277 excellent performance, reliability, and scalability. This is a
278 FUSE-based client that allows you to mount a Ceph file system without
279 root privileges.
280 .
281 Because the FUSE-based client has certain inherent performance
282 limitations, it is recommended that the native Linux kernel client
283 be used if possible. If it is not practical to load a kernel module
284 (insufficient privileges, older kernel, etc.), then the FUSE client will
285 do.
286
287Package: ceph-fuse-dbg
288Architecture: any
289Section: debug
290Priority: extra
291Depends: ceph-fuse (= ${binary:Version}), ${misc:Depends}
292Description: debugging symbols for ceph-fuse
293 Ceph is a distributed network file system designed to provide
294 excellent performance, reliability, and scalability. This is a
295 FUSE-based client that allows you to mount a Ceph file system without
296 root privileges.
297 .
298 This package contains the debugging symbols for ceph-fuse.
299
300Package: libcrush1
301Conflicts: libcrush
302Replaces: libcrush
303Architecture: any
304Depends: ${shlibs:Depends}, ${misc:Depends}
305Description: CRUSH placement algorithm
306 CRUSH is a pseudo-random hash-like algorithm for mapping inputs to
307 a changing hierarchy of devices without a centralized directory. It was
308 originally designed for mapping data objects to storage servers, although it
309 may be useful in other domains. Because large systems are inherently
310 dynamic, CRUSH is designed to facilitate the addition and removal of devices
311 while minimizing unnecessary object movement. The algorithm accommodates a
312 wide variety of data replication and reliability mechanisms and distributes
313 data in terms of user-defined policies that enforce separation of replicas
314 across failure domains.
315
316Package: libcrush1-dbg
317Architecture: any
318Section: debug
319Priority: extra
320Depends: libcrush1 (= ${binary:Version}), ${misc:Depends}
321Description: debugging symbols for libcrush1
322 CRUSH is a pseudo-random hash-like algorithm for mapping inputs to
323 a changing hierarchy of devices without a centralized directory. It was
324 originally designed for mapping data objects to storage servesr, although it
325 may be useful in other domains. Because large systems are inherently
326 dynamic, CRUSH is designed to facilitate the addition and removal of devices
327 while minimizing unnecessary object movement. The algorithm accommodates a
328 wide variety of data replication and reliability mechanisms and distributes
329 data in terms of user-defined policies that enforce separation of replicas
330 across failure domains.
331 .
332 This package contains debugging symbols for libcrush.
333
334Package: libcrush1-dev
335Architecture: any
336Section: libdevel
337Depends: ${shlibs:Depends}, ${misc:Depends}, libcrush1 (= ${binary:Version})
338Description: CRUSH mapping algorithm (development files)
339 CRUSH is a pseudo-random hash-like algorithm for mapping inputs to
340 a changing hierarchy of devices without a centralized directory. It was
341 originally designed for mapping data objects to storage servesr, although it
342 may be useful in other domains. Because large systems are inherently
343 dynamic, CRUSH is designed to facilitate the addition and removal of devices
344 while minimizing unnecessary object movement. The algorithm accommodates a
345 wide variety of data replication and reliability mechanisms and distributes
346 data in terms of user-defined policies that enforce separation of replicas
347 across failure domains.
348 .
349 This package contains development files needed for building applications that
350 link against libcrush.
351
352Package: librados1
353Conflicts: librados
354Replaces: librados
355Architecture: any
356Depends: ${shlibs:Depends}, ${misc:Depends}, libcrush1
357Description: RADOS distributed object store client library
358 RADOS is a reliable, autonomic distributed object storage cluster
359 developed as part of the Ceph distributed storage system. This is a
360 shared library allowing applications to access the distributed object
361 store using a simple file-like interface.
362
363Package: librados1-dbg
364Architecture: any
365Section: debug
366Priority: extra
367Depends: librados1 (= ${binary:Version}), ${misc:Depends}
368Description: debugging symbols for librados1
369 RADOS is a reliable, autonomic distributed object storage cluster
370 developed as part of the Ceph distributed storage system. This is a
371 shared library allowing applications to access the distributed object
372 store using a simple file-like interface.
373 .
374 This package contains debugging symbols for librados1.
375
376Package: librados1-dev
377Architecture: any
378Section: libdevel
379Depends: ${shlibs:Depends}, ${misc:Depends}, librados1 (= ${binary:Version})
380Description: RADOS distributed object store client library (development files)
381 RADOS is a reliable, autonomic distributed object storage cluster
382 developed as part of the Ceph distributed storage system. This is a
383 shared library allowing applications to access the distributed object
384 store using a simple file-like interface.
385 .
386 This package contains development files needed for building applications that
387 link against librados.
388
389Package: libceph1
390Conflicts: libceph
391Replaces: libceph
392Architecture: any
393Depends: ${shlibs:Depends}, ${misc:Depends}, libcrush1
394Description: Ceph distributed file system client library
395 Ceph is a distributed network file system designed to provide
396 excellent performance, reliability, and scalability. This is a
397 shared library allowing applications to access a Ceph distributed
398 file system via a POSIX-like interface.
399
400Package: libceph1-dbg
401Architecture: any
402Section: debug
403Priority: extra
404Depends: libceph1 (= ${binary:Version}), ${misc:Depends}
405Description: debugging symbols for libceph1
406 Ceph is a distributed network file system designed to provide
407 excellent performance, reliability, and scalability. This is a
408 shared library allowing applications to access a Ceph distributed
409 file system via a POSIX-like interface.
410 .
411 This package contains debugging symbols for libceph1.
412
413Package: libceph1-dev
414Architecture: any
415Section: libdevel
416Depends: ${shlibs:Depends}, ${misc:Depends}, libceph1 (= ${binary:Version})
417Description: Ceph distributed file system client library (development files)
418 Ceph is a distributed network file system designed to provide
419 excellent performance, reliability, and scalability. This is a
420 shared library allowing applications to access a Ceph distributed
421 file system via a POSIX-like interface.
422 .
423 This package contains development files needed for building applications that
424 link against libceph.
425
426Package: radosgw
427Architecture: any
428Depends: ${shlibs:Depends}, ${misc:Depends}, libexpat1, librados1
429Description: REST gateway for RADOS distributed object store
430 RADOS is a distributed object store used by the Ceph distributed
431 storage system. This package provides a REST gateway to the
432 object store that aims to implement a superset of Amazon's S3
433 service.
434 .
435 This package contains the proxy daemon and related tools only.
436
437Package: radosgw-dbg
438Architecture: any
439Section: debug
440Priority: extra
441Depends: radosgw (= ${binary:Version}), ${misc:Depends}
442Description: debugging symbols for radosgw
443 RADOS is a distributed object store used by the Ceph distributed
444 storage system. This package provides a REST gateway to the
445 object store that aims to implement a superset of Amazon's S3
446 service.
447 .
448 This package contains debugging symbols for radosgw.
449>>>>>>> MERGE-SOURCE
237450
=== modified file 'debian/copyright'
--- debian/copyright 2011-02-25 15:17:26 +0000
+++ debian/copyright 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=1352Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
2Name: ceph3Name: ceph
3Maintainer: Sage Weil <sage@newdream.net>4Maintainer: Sage Weil <sage@newdream.net>
@@ -74,3 +75,71 @@
74 Copyright (C) 2004-2009 by Sage Weil <sage@newdream.net>75 Copyright (C) 2004-2009 by Sage Weil <sage@newdream.net>
75 Copyright (C) 2010 Canonical, Ltd.76 Copyright (C) 2010 Canonical, Ltd.
76 Licensed under LGPL-2.177 Licensed under LGPL-2.1
78=======
79Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
80Name: ceph
81Maintainer: Sage Weil <sage@newdream.net>
82Source: http://ceph.newdream.net/
83
84Files: *
85Copyright: (c) 2004-2010 by Sage Weil <sage@newdream.net>
86License: LGPL2.1 (see /usr/share/common-licenses/LGPL-2.1)
87
88Files: src/client/fuse.cc
89Copyright:
90 Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu>
91 Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
92License: GPL
93
94Files: src/osbdb/OSBDB.h
95Copyright: Copyright (C) 2007 Casey Marshall <csm@soe.ucsc.edu>
96License: LGPL2.1
97
98Files: src/mount/canonicalize.c
99Copyright: Copyright (C) 1993 Rick Sladkey <jrs@world.std.com>
100License: LGPL2 or later
101
102Files: src/os/btrfs_ioctl.h
103Copyright: Copyright (C) 2007 Oracle. All rights reserved.
104License: GPL2
105
106Files: src/include/ceph_hash.cc
107Copyright: None
108License: Public domain
109
110Files: src/common/sctp_crc32.c:
111Copyright:
112 Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
113 Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
114License:
115 Redistribution and use in source and binary forms, with or without
116 modification, are permitted provided that the following conditions are met:
117
118 a) Redistributions of source code must retain the above copyright notice,
119 this list of conditions and the following disclaimer.
120
121 b) Redistributions in binary form must reproduce the above copyright
122 notice, this list of conditions and the following disclaimer in
123 the documentation and/or other materials provided with the distribution.
124
125 c) Neither the name of Cisco Systems, Inc. nor the names of its
126 contributors may be used to endorse or promote products derived
127 from this software without specific prior written permission.
128
129 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
130 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
131 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
132 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
133 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
134 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
135 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
136 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
137 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
138 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
139 THE POSSIBILITY OF SUCH DAMAGE.
140
141Packaging:
142 Copyright (C) 2004-2009 by Sage Weil <sage@newdream.net>
143 Copyright (C) 2010 Canonical, Ltd.
144 Licensed under LGPL-2.1
145>>>>>>> MERGE-SOURCE
77146
=== modified file 'debian/libceph1-dev.install'
--- debian/libceph1-dev.install 2011-02-25 15:17:26 +0000
+++ debian/libceph1-dev.install 2011-03-28 07:08:46 +0000
@@ -1,4 +1,10 @@
1<<<<<<< TREE
1usr/lib/libceph.so2usr/lib/libceph.so
2usr/lib/libceph.a3usr/lib/libceph.a
3usr/lib/libceph.la4usr/lib/libceph.la
4usr/include/ceph/libceph.h5usr/include/ceph/libceph.h
6=======
7/usr/lib/libceph.so
8/usr/lib/libceph.a
9/usr/include/ceph/libceph.h
10>>>>>>> MERGE-SOURCE
511
=== modified file 'debian/libceph1.install'
--- debian/libceph1.install 2011-02-25 15:17:26 +0000
+++ debian/libceph1.install 2011-03-28 07:08:46 +0000
@@ -1,2 +1,7 @@
1<<<<<<< TREE
1usr/lib/libceph.so.*2usr/lib/libceph.so.*
23
4=======
5/usr/lib/libceph.so.*
6
7>>>>>>> MERGE-SOURCE
38
=== modified file 'debian/libcrush1-dev.install'
--- debian/libcrush1-dev.install 2011-02-25 15:17:26 +0000
+++ debian/libcrush1-dev.install 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1usr/lib/libcrush.so2usr/lib/libcrush.so
2usr/lib/libcrush.a3usr/lib/libcrush.a
3usr/lib/libcrush.la4usr/lib/libcrush.la
@@ -5,3 +6,11 @@
5usr/include/crush/types.h6usr/include/crush/types.h
6usr/include/crush/mapper.h7usr/include/crush/mapper.h
7usr/include/crush/crush.h8usr/include/crush/crush.h
9=======
10/usr/lib/libcrush.so
11/usr/lib/libcrush.a
12/usr/include/crush/hash.h
13/usr/include/crush/types.h
14/usr/include/crush/mapper.h
15/usr/include/crush/crush.h
16>>>>>>> MERGE-SOURCE
817
=== modified file 'debian/libcrush1.install'
--- debian/libcrush1.install 2011-02-25 15:17:26 +0000
+++ debian/libcrush1.install 2011-03-28 07:08:46 +0000
@@ -1,2 +1,7 @@
1<<<<<<< TREE
1usr/lib/libcrush.so.*2usr/lib/libcrush.so.*
23
4=======
5/usr/lib/libcrush.so.*
6
7>>>>>>> MERGE-SOURCE
38
=== modified file 'debian/librados1-dev.install'
--- debian/librados1-dev.install 2011-02-25 15:17:26 +0000
+++ debian/librados1-dev.install 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1usr/lib/librados.so2usr/lib/librados.so
2usr/lib/librados.a3usr/lib/librados.a
3usr/lib/librados.la4usr/lib/librados.la
@@ -9,3 +10,15 @@
9usr/include/rados/crc32c.h10usr/include/rados/crc32c.h
10usr/include/rados/Spinlock.h11usr/include/rados/Spinlock.h
11usr/include/rados/assert.h12usr/include/rados/assert.h
13=======
14/usr/lib/librados.so
15/usr/lib/librados.a
16/usr/include/rados/librados.h
17/usr/include/rados/librados.hpp
18/usr/include/rados/buffer.h
19/usr/include/rados/atomic.h
20/usr/include/rados/page.h
21/usr/include/rados/crc32c.h
22/usr/include/rados/Spinlock.h
23/usr/include/rados/assert.h
24>>>>>>> MERGE-SOURCE
1225
=== modified file 'debian/librados1.install'
--- debian/librados1.install 2011-02-25 15:17:26 +0000
+++ debian/librados1.install 2011-03-28 07:08:46 +0000
@@ -1,2 +1,7 @@
1<<<<<<< TREE
1usr/lib/librados.so.*2usr/lib/librados.so.*
23
4=======
5/usr/lib/librados.so.*
6
7>>>>>>> MERGE-SOURCE
38
=== added file 'debian/move_dbg_files.sh'
--- debian/move_dbg_files.sh 1970-01-01 00:00:00 +0000
+++ debian/move_dbg_files.sh 2011-03-28 07:08:46 +0000
@@ -0,0 +1,8 @@
1#!/bin/sh
2
3for f in ceph ceph-fuse libcrush1 librados1 libceph1 radosgw
4do
5 echo moving $f unstripped binaries into $f-dbg
6 mkdir -p debian/$f-dbg/usr/lib
7 mv debian/$f/usr/lib/debug debian/$f-dbg/usr/lib
8done
09
=== added directory 'debian/patches'
=== modified file 'debian/rules'
--- debian/rules 2011-02-25 15:17:26 +0000
+++ debian/rules 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1#!/usr/bin/make -f2#!/usr/bin/make -f
2# -*- makefile -*-3# -*- makefile -*-
3export DH_VERBOSE=14export DH_VERBOSE=1
@@ -86,3 +87,70 @@
8687
87binary: binary-indep binary-arch88binary: binary-indep binary-arch
88.PHONY: build clean binary-indep binary-arch binary install configure89.PHONY: build clean binary-indep binary-arch binary install configure
90=======
91#!/usr/bin/make -f
92# -*- makefile -*-
93export DH_VERBOSE=1
94configure: configure-stamp
95configure-stamp:
96 dh_testdir
97 touch configure-stamp
98build: build-stamp
99build-stamp: configure-stamp
100 dh_testdir
101
102 ./autogen.sh
103 ./configure --prefix=/usr
104 $(MAKE)
105 cp src/init-ceph debian/ceph.init
106
107 touch $@
108clean:
109 dh_testdir
110 dh_testroot
111 rm -f build-stamp configure-stamp
112
113 test ! -f Makefile || $(MAKE) clean
114
115 dh_clean
116install: build
117 dh_testdir
118 dh_testroot
119 dh_clean -k
120 dh_installdirs
121
122 $(MAKE) DESTDIR=$(CURDIR) install
123
124
125# Add here commands to install the package into debian/testpack.
126# Build architecture-independent files here.
127binary-indep: build install
128# We have nothing to do by default.
129# Build architecture-dependent files here.
130binary-arch: build install
131 dh_testdir
132 dh_testroot
133 dh_installchangelogs
134 dh_installdocs
135 dh_installexamples
136 dh_install
137 dh_installlogrotate
138 dh_installinit
139 dh_installman
140 dh_lintian
141 dh_link
142
143 dh_strip -k --exclude=libcls_
144 chmod +x debian/move_dbg_files.sh && debian/move_dbg_files.sh
145
146 dh_compress
147 dh_fixperms
148 dh_makeshlibs -n # we do the postinst/postrm scripts manually
149 dh_installdeb
150 dh_shlibdeps
151 dh_gencontrol
152 dh_md5sums
153 dh_builddeb
154binary: binary-indep binary-arch
155.PHONY: build clean binary-indep binary-arch binary install configure
156>>>>>>> MERGE-SOURCE
89157
=== modified file 'debian/source/format'
--- debian/source/format 2011-02-25 15:17:26 +0000
+++ debian/source/format 2011-03-28 07:08:46 +0000
@@ -1,1 +1,5 @@
1<<<<<<< TREE
11.021.0
3=======
43.0 (quilt)
5>>>>>>> MERGE-SOURCE
26
=== modified file 'src/.git_version'
--- src/.git_version 2011-02-25 15:17:26 +0000
+++ src/.git_version 2011-03-28 07:08:46 +0000
@@ -1,1 +1,5 @@
1<<<<<<< TREE
12cd2c56dd07c4862da6a5a8b4c2febafacc37d2222cd2c56dd07c4862da6a5a8b4c2febafacc37d22
3=======
4f7572de5cb87eb7157217be4975ae66d90831bb7
5>>>>>>> MERGE-SOURCE
26
=== modified file 'src/Makefile.am'
=== modified file 'src/Makefile.in'
=== modified file 'src/client/Client.cc'
--- src/client/Client.cc 2011-02-25 15:17:26 +0000
+++ src/client/Client.cc 2011-03-28 07:08:46 +0000
@@ -375,6 +375,7 @@
375 }375 }
376 if (truncate_seq >= in->truncate_seq &&376 if (truncate_seq >= in->truncate_seq &&
377 in->truncate_size != truncate_size) {377 in->truncate_size != truncate_size) {
378<<<<<<< TREE
378 if (in->is_file()) {379 if (in->is_file()) {
379 dout(10) << "truncate_size " << in->truncate_size << " -> "380 dout(10) << "truncate_size " << in->truncate_size << " -> "
380 << truncate_size << dendl;381 << truncate_size << dendl;
@@ -390,6 +391,23 @@
390 } else {391 } else {
391 dout(0) << "Hmmm, truncate_seq && truncate_size changed on non-file inode!" << dendl;392 dout(0) << "Hmmm, truncate_seq && truncate_size changed on non-file inode!" << dendl;
392 }393 }
394=======
395 if (in->is_file()) {
396 dout(10) << "truncate_size " << in->truncate_size << " -> "
397 << truncate_size << dendl;
398 in->truncate_size = truncate_size;
399 in->oset.truncate_size = truncate_size;
400 if (g_conf.client_oc && prior_size) { //do actual truncation
401 vector<ObjectExtent> ls;
402 filer->file_to_extents(in->ino, &in->layout,
403 truncate_size, prior_size - truncate_size,
404 ls);
405 objectcacher->truncate_set(&in->oset, ls);
406 }
407 } else {
408 dout(0) << "Hmmm, truncate_seq && truncate_size changed on non-file inode!" << dendl;
409 }
410>>>>>>> MERGE-SOURCE
393 }411 }
394 412
395 // be careful with size, mtime, atime413 // be careful with size, mtime, atime
396414
=== modified file 'src/common/signal.cc'
--- src/common/signal.cc 2011-02-25 15:17:26 +0000
+++ src/common/signal.cc 2011-03-28 07:08:46 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-2// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab3// vim: ts=8 sw=2 smarttab
3/*4/*
@@ -160,3 +161,165 @@
160 if (old_sigset)161 if (old_sigset)
161 sigdelset(old_sigset, SIGKILL);162 sigdelset(old_sigset, SIGKILL);
162}163}
164=======
165// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
166// vim: ts=8 sw=2 smarttab
167/*
168 * Ceph - scalable distributed file system
169 *
170 * Copyright (C) 2011 New Dream Network
171 *
172 * This is free software; you can redistribute it and/or
173 * modify it under the terms of the GNU Lesser General Public
174 * License version 2.1, as published by the Free Software
175 * Foundation. See file COPYING.
176 *
177 */
178
179#include "common/BackTrace.h"
180#include "common/Logger.h"
181#include "common/debug.h"
182#include "config.h"
183
184#include <signal.h>
185#include <sstream>
186#include <stdlib.h>
187#include <sys/stat.h>
188#include <sys/types.h>
189
190#define dout_prefix *_dout
191#define derr dout(0)
192
193typedef void (*signal_handler_t)(int);
194
195static void install_sighandler(int signum, signal_handler_t handler, int flags)
196{
197 int ret;
198 struct sigaction oldact;
199 struct sigaction act;
200 memset(&act, 0, sizeof(act));
201
202 act.sa_handler = handler;
203 sigemptyset(&act.sa_mask);
204 act.sa_flags = flags;
205
206 ret = sigaction(signum, &act, &oldact);
207 if (ret != 0) {
208 *_dout << "install_sighandler: sigaction returned " << ret << " when "
209 << "trying to install a signal handler for "
210 << sys_siglist[signum] << "\n";
211 exit(1);
212 }
213}
214
215static void sighup_handler(int signum)
216{
217 // All this does is set a few bits telling us to re-open our logfiles and
218 // restart our central logging service.
219 _dout_need_open = true;
220 logger_reopen_all();
221}
222
223static void handle_fatal_signal(int signum)
224{
225 // This code may itself trigger a SIGSEGV if the heap is corrupt. In that
226 // case, SA_RESETHAND specifies that the default signal handler--
227 // presumably dump core-- will handle it.
228 *_dout << "*** Caught signal (" << sys_siglist[signum] << ") ***"
229 << std::endl;
230 *_dout << "in thread " << std::hex << pthread_self() << std::endl;
231 BackTrace bt(0);
232 bt.print(*_dout);
233 _dout->flush();
234
235 // Use default handler to dump core
236 int ret = raise(signum);
237
238 // Normally, we won't get here. If we do, something is very weird.
239 if (ret) {
240 *_dout << "handle_fatal_signal: failed to re-raise signal " << signum
241 << std::endl;
242 }
243 else {
244 *_dout << "handle_fatal_signal: default handler for signal " << signum
245 << " didn't terminate the process?" << std::endl;
246 }
247 exit(1);
248}
249
250#include <syslog.h>
251
252std::string signal_mask_to_str()
253{
254 sigset_t old_sigset;
255 if (pthread_sigmask(SIG_SETMASK, NULL, &old_sigset)) {
256 return "(pthread_signmask failed)";
257 }
258
259 ostringstream oss;
260 oss << "show_signal_mask: { ";
261 string sep("");
262 for (int signum = 0; signum < NSIG; ++signum) {
263 if (sigismember(&old_sigset, signum) == 1) {
264 oss << sep << signum;
265 sep = ", ";
266 }
267 }
268 oss << " }";
269 return oss.str();
270}
271
272void install_standard_sighandlers(void)
273{
274 install_sighandler(SIGHUP, sighup_handler, SA_RESTART);
275 install_sighandler(SIGSEGV, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
276 install_sighandler(SIGABRT, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
277 install_sighandler(SIGBUS, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
278 install_sighandler(SIGILL, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
279 install_sighandler(SIGFPE, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
280 install_sighandler(SIGXCPU, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
281 install_sighandler(SIGXFSZ, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
282 install_sighandler(SIGSYS, handle_fatal_signal, SA_RESETHAND | SA_NODEFER);
283}
284
285void block_all_signals(sigset_t *old_sigset)
286{
287 sigset_t sigset;
288 sigfillset(&sigset);
289 sigdelset(&sigset, SIGKILL);
290 if (pthread_sigmask(SIG_BLOCK, &sigset, old_sigset)) {
291 derr << "block_all_signals: sigprocmask failed" << dendl;
292 if (old_sigset)
293 sigaddset(old_sigset, SIGKILL);
294 return;
295 }
296 if (old_sigset)
297 sigdelset(old_sigset, SIGKILL);
298}
299
300void restore_sigset(const sigset_t *old_sigset)
301{
302 if (sigismember(old_sigset, SIGKILL) != 0) {
303 derr << "restore_sigset: not restoring invalid old_sigset" << dendl;
304 return;
305 }
306 if (pthread_sigmask(SIG_SETMASK, old_sigset, NULL)) {
307 derr << "restore_sigset: sigprocmask failed" << dendl;
308 }
309}
310
311void unblock_all_signals(sigset_t *old_sigset)
312{
313 sigset_t sigset;
314 sigfillset(&sigset);
315 sigdelset(&sigset, SIGKILL);
316 if (pthread_sigmask(SIG_UNBLOCK, &sigset, old_sigset)) {
317 derr << "unblock_all_signals: sigprocmask failed" << dendl;
318 if (old_sigset)
319 sigaddset(old_sigset, SIGKILL);
320 return;
321 }
322 if (old_sigset)
323 sigdelset(old_sigset, SIGKILL);
324}
325>>>>>>> MERGE-SOURCE
163326
=== modified file 'src/include/ceph_strings.cc'
--- src/include/ceph_strings.cc 2011-02-25 15:17:26 +0000
+++ src/include/ceph_strings.cc 2011-03-28 07:08:46 +0000
@@ -54,10 +54,16 @@
54 case CEPH_OSD_OP_BALANCEREADS: return "balance-reads";54 case CEPH_OSD_OP_BALANCEREADS: return "balance-reads";
55 case CEPH_OSD_OP_UNBALANCEREADS: return "unbalance-reads";55 case CEPH_OSD_OP_UNBALANCEREADS: return "unbalance-reads";
56 case CEPH_OSD_OP_SCRUB: return "scrub";56 case CEPH_OSD_OP_SCRUB: return "scrub";
57<<<<<<< TREE
57 case CEPH_OSD_OP_SCRUB_RESERVE: return "scrub-reserve";58 case CEPH_OSD_OP_SCRUB_RESERVE: return "scrub-reserve";
58 case CEPH_OSD_OP_SCRUB_UNRESERVE: return "scrub-unreserve";59 case CEPH_OSD_OP_SCRUB_UNRESERVE: return "scrub-unreserve";
59 case CEPH_OSD_OP_SCRUB_STOP: return "scrub-stop";60 case CEPH_OSD_OP_SCRUB_STOP: return "scrub-stop";
60 case CEPH_OSD_OP_SCRUB_MAP: return "scrub-map";61 case CEPH_OSD_OP_SCRUB_MAP: return "scrub-map";
62=======
63 case CEPH_OSD_OP_SCRUB_RESERVE: return "scrub-reserve";
64 case CEPH_OSD_OP_SCRUB_UNRESERVE: return "scrub-unreserve";
65 case CEPH_OSD_OP_SCRUB_STOP: return "scrub-stop";
66>>>>>>> MERGE-SOURCE
6167
62 case CEPH_OSD_OP_WRLOCK: return "wrlock";68 case CEPH_OSD_OP_WRLOCK: return "wrlock";
63 case CEPH_OSD_OP_WRUNLOCK: return "wrunlock";69 case CEPH_OSD_OP_WRUNLOCK: return "wrunlock";
6470
=== modified file 'src/include/rados.h'
--- src/include/rados.h 2011-02-25 15:17:26 +0000
+++ src/include/rados.h 2011-03-28 07:08:46 +0000
@@ -220,6 +220,7 @@
220 CEPH_OSD_OP_RMXATTR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_ATTR | 4,220 CEPH_OSD_OP_RMXATTR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_ATTR | 4,
221221
222 /** subop **/222 /** subop **/
223<<<<<<< TREE
223 CEPH_OSD_OP_PULL = CEPH_OSD_OP_MODE_SUB | 1,224 CEPH_OSD_OP_PULL = CEPH_OSD_OP_MODE_SUB | 1,
224 CEPH_OSD_OP_PUSH = CEPH_OSD_OP_MODE_SUB | 2,225 CEPH_OSD_OP_PUSH = CEPH_OSD_OP_MODE_SUB | 2,
225 CEPH_OSD_OP_BALANCEREADS = CEPH_OSD_OP_MODE_SUB | 3,226 CEPH_OSD_OP_BALANCEREADS = CEPH_OSD_OP_MODE_SUB | 3,
@@ -229,6 +230,16 @@
229 CEPH_OSD_OP_SCRUB_UNRESERVE = CEPH_OSD_OP_MODE_SUB | 7,230 CEPH_OSD_OP_SCRUB_UNRESERVE = CEPH_OSD_OP_MODE_SUB | 7,
230 CEPH_OSD_OP_SCRUB_STOP = CEPH_OSD_OP_MODE_SUB | 8,231 CEPH_OSD_OP_SCRUB_STOP = CEPH_OSD_OP_MODE_SUB | 8,
231 CEPH_OSD_OP_SCRUB_MAP = CEPH_OSD_OP_MODE_SUB | 9,232 CEPH_OSD_OP_SCRUB_MAP = CEPH_OSD_OP_MODE_SUB | 9,
233=======
234 CEPH_OSD_OP_PULL = CEPH_OSD_OP_MODE_SUB | 1,
235 CEPH_OSD_OP_PUSH = CEPH_OSD_OP_MODE_SUB | 2,
236 CEPH_OSD_OP_BALANCEREADS = CEPH_OSD_OP_MODE_SUB | 3,
237 CEPH_OSD_OP_UNBALANCEREADS = CEPH_OSD_OP_MODE_SUB | 4,
238 CEPH_OSD_OP_SCRUB = CEPH_OSD_OP_MODE_SUB | 5,
239 CEPH_OSD_OP_SCRUB_RESERVE = CEPH_OSD_OP_MODE_SUB | 6,
240 CEPH_OSD_OP_SCRUB_UNRESERVE = CEPH_OSD_OP_MODE_SUB | 7,
241 CEPH_OSD_OP_SCRUB_STOP = CEPH_OSD_OP_MODE_SUB | 8,
242>>>>>>> MERGE-SOURCE
232243
233 /** lock **/244 /** lock **/
234 CEPH_OSD_OP_WRLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 1,245 CEPH_OSD_OP_WRLOCK = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_LOCK | 1,
235246
=== modified file 'src/mds/Locker.cc'
=== modified file 'src/mds/MDS.cc'
--- src/mds/MDS.cc 2011-02-25 15:17:26 +0000
+++ src/mds/MDS.cc 2011-03-28 07:08:46 +0000
@@ -924,10 +924,16 @@
924 oldmap->get_mds_set(oldresolve, MDSMap::STATE_RESOLVE);924 oldmap->get_mds_set(oldresolve, MDSMap::STATE_RESOLVE);
925 mdsmap->get_mds_set(resolve, MDSMap::STATE_RESOLVE);925 mdsmap->get_mds_set(resolve, MDSMap::STATE_RESOLVE);
926 if (oldresolve != resolve) {926 if (oldresolve != resolve) {
927<<<<<<< TREE
927 dout(10) << " resolve set is " << resolve << ", was " << oldresolve << dendl;928 dout(10) << " resolve set is " << resolve << ", was " << oldresolve << dendl;
928 calc_recovery_set();929 calc_recovery_set();
929 if (!mdsmap->is_any_failed())930 if (!mdsmap->is_any_failed())
930 mdcache->send_resolves();931 mdcache->send_resolves();
932=======
933 dout(10) << " resolve set is " << resolve << ", was " << oldresolve << dendl;
934 calc_recovery_set();
935 mdcache->send_resolves();
936>>>>>>> MERGE-SOURCE
931 }937 }
932 }938 }
933 939
934940
=== modified file 'src/mds/MDSMap.h'
=== modified file 'src/mon/MDSMonitor.cc'
--- src/mon/MDSMonitor.cc 2011-02-25 15:17:26 +0000
+++ src/mon/MDSMonitor.cc 2011-03-28 07:08:46 +0000
@@ -182,6 +182,7 @@
182 << " " << m->get_compat()182 << " " << m->get_compat()
183 << dendl;183 << dendl;
184184
185<<<<<<< TREE
185 // make sure the address has a port186 // make sure the address has a port
186 if (m->get_orig_source_addr().get_port() == 0) {187 if (m->get_orig_source_addr().get_port() == 0) {
187 dout(1) << " ignoring boot message without a port" << dendl;188 dout(1) << " ignoring boot message without a port" << dendl;
@@ -194,6 +195,14 @@
194 goto out;195 goto out;
195 }196 }
196197
198=======
199 // check compat
200 if (!m->get_compat().writeable(mdsmap.compat)) {
201 dout(1) << " mds " << m->get_source_inst() << " can't write to mdsmap " << mdsmap.compat << dendl;
202 goto out;
203 }
204
205>>>>>>> MERGE-SOURCE
197 // fw to leader?206 // fw to leader?
198 if (!mon->is_leader())207 if (!mon->is_leader())
199 return false;208 return false;
200209
=== modified file 'src/mount/mount.ceph.c'
=== modified file 'src/msg/Message.cc'
--- src/msg/Message.cc 2011-02-25 15:17:26 +0000
+++ src/msg/Message.cc 2011-03-28 07:08:46 +0000
@@ -315,12 +315,18 @@
315 case MSG_REMOVE_SNAPS:315 case MSG_REMOVE_SNAPS:
316 m = new MRemoveSnaps;316 m = new MRemoveSnaps;
317 break;317 break;
318<<<<<<< TREE
318 case MSG_OSD_PG_MISSING:319 case MSG_OSD_PG_MISSING:
319 m = new MOSDPGMissing;320 m = new MOSDPGMissing;
320 break;321 break;
321 case MSG_OSD_REP_SCRUB:322 case MSG_OSD_REP_SCRUB:
322 m = new MOSDRepScrub;323 m = new MOSDRepScrub;
323 break;324 break;
325=======
326 case MSG_OSD_PG_MISSING:
327 m = new MOSDPGMissing;
328 break;
329>>>>>>> MERGE-SOURCE
324 // auth330 // auth
325 case CEPH_MSG_AUTH:331 case CEPH_MSG_AUTH:
326 m = new MAuth;332 m = new MAuth;
327333
=== modified file 'src/msg/Message.h'
--- src/msg/Message.h 2011-02-25 15:17:26 +0000
+++ src/msg/Message.h 2011-03-28 07:08:46 +0000
@@ -73,8 +73,12 @@
73#define MSG_REMOVE_SNAPS 9073#define MSG_REMOVE_SNAPS 90
7474
75#define MSG_OSD_SCRUB 9175#define MSG_OSD_SCRUB 91
76<<<<<<< TREE
76#define MSG_OSD_PG_MISSING 9277#define MSG_OSD_PG_MISSING 92
77#define MSG_OSD_REP_SCRUB 9378#define MSG_OSD_REP_SCRUB 93
79=======
80#define MSG_OSD_PG_MISSING 92
81>>>>>>> MERGE-SOURCE
7882
7983
8084
8185
=== modified file 'src/os/FileStore.cc'
--- src/os/FileStore.cc 2011-02-25 15:17:26 +0000
+++ src/os/FileStore.cc 2011-03-28 07:08:46 +0000
@@ -1048,6 +1048,7 @@
1048 dout(0) << "mount WARNING: not btrfs, store may be in inconsistent state" << dendl;1048 dout(0) << "mount WARNING: not btrfs, store may be in inconsistent state" << dendl;
1049 } else {1049 } else {
1050 uint64_t cp = snaps.back();1050 uint64_t cp = snaps.back();
1051<<<<<<< TREE
1051 uint64_t curr_seq;1052 uint64_t curr_seq;
10521053
1053 int curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);1054 int curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);
@@ -1079,6 +1080,38 @@
1079 cerr << TEXT_YELLOW1080 cerr << TEXT_YELLOW
1080 << " ** WARNING: forcing the use of stale snapshot data\n" << TEXT_NORMAL;1081 << " ** WARNING: forcing the use of stale snapshot data\n" << TEXT_NORMAL;
1081 }1082 }
1083=======
1084 uint64_t curr_seq;
1085
1086 int curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);
1087 assert(curr_fd >= 0);
1088 close(curr_fd);
1089 dout(10) << "*** curr_seq=" << curr_seq << " cp=" << cp << dendl;
1090
1091 if (cp != curr_seq && !g_conf.osd_use_stale_snap) {
1092 dout(0) << "\n"
1093 << " ** ERROR: current volume data version is not equal to snapshotted version\n"
1094 << " which can lead to data inconsistency. \n"
1095 << " Current version=" << curr_seq << " snapshot version=" << cp << "\n"
1096 << " Startup with snapshotted version can be forced using the\n"
1097 <<" 'osd use stale snap = true' config option.\n"
1098 << dendl;
1099 cerr << TEXT_RED
1100 << " ** ERROR: current volume data version is not equal to snapshotted version\n"
1101 << " which can lead to data inconsistency. \n"
1102 << " Current version=" << curr_seq << " snapshot version=" << cp << "\n"
1103 << " Startup with snapshotted version can be forced using the\n"
1104 <<" 'osd use stale snap = true' config option.\n"
1105 << TEXT_NORMAL;
1106 exit(1);
1107 }
1108
1109 if (cp != curr_seq) {
1110 dout(0) << "WARNING: user forced start with data sequence mismatch: curr=" << curr_seq << " snap_seq=" << cp << dendl;
1111 cerr << TEXT_YELLOW
1112 << " ** WARNING: forcing the use of stale snapshot data\n" << TEXT_NORMAL;
1113 }
1114>>>>>>> MERGE-SOURCE
10821115
1083 // drop current1116 // drop current
1084 btrfs_ioctl_vol_args vol_args;1117 btrfs_ioctl_vol_args vol_args;
@@ -1109,6 +1142,7 @@
1109 ::close(vol_args.fd);1142 ::close(vol_args.fd);
1110 dout(10) << "mount rolled back to consistent snap " << cp << dendl;1143 dout(10) << "mount rolled back to consistent snap " << cp << dendl;
1111 snaps.pop_back();1144 snaps.pop_back();
1145<<<<<<< TREE
11121146
1113 if (cp != curr_seq) {1147 if (cp != curr_seq) {
1114 curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);1148 curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);
@@ -1117,6 +1151,17 @@
1117 write_op_seq(curr_fd, curr_seq);1151 write_op_seq(curr_fd, curr_seq);
1118 ::close(curr_fd);1152 ::close(curr_fd);
1119 }1153 }
1154=======
1155
1156 assert(curr_fd >= 0);
1157 if (cp != curr_seq) {
1158 curr_fd = read_op_seq(current_op_seq_fn, &curr_seq);
1159 /* we'll use the higher version from now on */
1160 curr_seq = cp;
1161 write_op_seq(curr_fd, curr_seq);
1162 }
1163 close(curr_fd);
1164>>>>>>> MERGE-SOURCE
1120 }1165 }
1121 }1166 }
11221167
11231168
=== modified file 'src/osd/OSD.cc'
--- src/osd/OSD.cc 2011-02-25 15:17:26 +0000
+++ src/osd/OSD.cc 2011-03-28 07:08:46 +0000
@@ -2056,6 +2056,7 @@
2056{2056{
2057 // lock!2057 // lock!
2058 osd_lock.Lock();2058 osd_lock.Lock();
2059<<<<<<< TREE
2059 while (dispatch_running) {2060 while (dispatch_running) {
2060 dout(10) << "ms_dispatch waiting for other dispatch thread to complete" << dendl;2061 dout(10) << "ms_dispatch waiting for other dispatch thread to complete" << dendl;
2061 dispatch_cond.Wait(osd_lock);2062 dispatch_cond.Wait(osd_lock);
@@ -2063,7 +2064,11 @@
2063 dispatch_running = true;2064 dispatch_running = true;
20642065
2065 do_waiters();2066 do_waiters();
2067=======
2068 ++dispatch_running;
2069>>>>>>> MERGE-SOURCE
2066 _dispatch(m);2070 _dispatch(m);
2071<<<<<<< TREE
2067 do_waiters();2072 do_waiters();
20682073
2069 dispatch_running = false;2074 dispatch_running = false;
@@ -2071,6 +2076,10 @@
2071 // no need to signal here, since tick() doesn't wait.2076 // no need to signal here, since tick() doesn't wait.
2072 //dispatch_cond.Signal();2077 //dispatch_cond.Signal();
20732078
2079=======
2080 --dispatch_running;
2081 do_waiters();
2082>>>>>>> MERGE-SOURCE
2074 osd_lock.Unlock();2083 osd_lock.Unlock();
2075 return true;2084 return true;
2076}2085}
@@ -2279,6 +2288,7 @@
2279 }2288 }
2280 }2289 }
2281 }2290 }
2291<<<<<<< TREE
22822292
2283 logger->set(l_osd_buf, buffer_total_alloc.read());2293 logger->set(l_osd_buf, buffer_total_alloc.read());
22842294
@@ -2289,6 +2299,13 @@
2289 dout(10) << "queueing MOSDRepScrub " << *m << dendl;2299 dout(10) << "queueing MOSDRepScrub " << *m << dendl;
2290 rep_scrub_wq.queue(m);2300 rep_scrub_wq.queue(m);
2291}2301}
2302=======
2303
2304 logger->set(l_osd_buf, buffer_total_alloc.read());
2305
2306}
2307
2308>>>>>>> MERGE-SOURCE
22922309
2293void OSD::handle_scrub(MOSDScrub *m)2310void OSD::handle_scrub(MOSDScrub *m)
2294{2311{
@@ -2769,9 +2786,14 @@
2769 pg->write_info(t);2786 pg->write_info(t);
2770 }2787 }
27712788
2789<<<<<<< TREE
2772 bool do_shutdown = false;2790 bool do_shutdown = false;
2773 bool do_restart = false;2791 bool do_restart = false;
2792=======
2793 bool do_shutdown = false;
2794>>>>>>> MERGE-SOURCE
2774 if (osdmap->get_epoch() > 0 &&2795 if (osdmap->get_epoch() > 0 &&
2796<<<<<<< TREE
2775 state == STATE_ACTIVE) {2797 state == STATE_ACTIVE) {
2776 if (!osdmap->exists(whoami)) {2798 if (!osdmap->exists(whoami)) {
2777 dout(0) << "map says i do not exist. shutting down." << dendl;2799 dout(0) << "map says i do not exist. shutting down." << dendl;
@@ -2812,6 +2834,34 @@
28122834
2813 reset_heartbeat_peers();2835 reset_heartbeat_peers();
2814 }2836 }
2837=======
2838 state == STATE_ACTIVE) {
2839 if (!osdmap->exists(whoami)) {
2840 dout(0) << "map says i do not exist. shutting down." << dendl;
2841 do_shutdown = true; // don't call shutdown() while we have everything paused
2842 } else if (!osdmap->is_up(whoami) ||
2843 osdmap->get_addr(whoami) != client_messenger->get_myaddr()) {
2844 stringstream ss;
2845 ss << "map e" << osdmap->get_epoch() << " wrongly marked me down";
2846 logclient.log(LOG_WARN, ss);
2847
2848 state = STATE_BOOTING;
2849 up_epoch = 0;
2850
2851 int cport = cluster_messenger->get_myaddr().get_port();
2852 int hbport = heartbeat_messenger->get_myaddr().get_port();
2853
2854 int r = cluster_messenger->rebind(hbport);
2855 if (r != 0)
2856 do_shutdown = true; // FIXME: do_restart?
2857
2858 r = heartbeat_messenger->rebind(cport);
2859 if (r != 0)
2860 do_shutdown = true; // FIXME: do_restart?
2861
2862 reset_heartbeat_peers();
2863 }
2864>>>>>>> MERGE-SOURCE
2815 }2865 }
28162866
2817 // note in the superblock that we were clean thru the prior epoch2867 // note in the superblock that we were clean thru the prior epoch
28182868
=== modified file 'src/osd/OSD.h'
--- src/osd/OSD.h 2011-02-25 15:17:26 +0000
+++ src/osd/OSD.h 2011-03-28 07:08:46 +0000
@@ -133,8 +133,12 @@
133 }133 }
134 };134 };
135135
136<<<<<<< TREE
136 Cond dispatch_cond;137 Cond dispatch_cond;
137 int dispatch_running;138 int dispatch_running;
139=======
140 int dispatch_running;
141>>>>>>> MERGE-SOURCE
138142
139 void open_logger();143 void open_logger();
140 void start_logger();144 void start_logger();
141145
=== modified file 'src/osd/PG.cc'
--- src/osd/PG.cc 2011-02-25 15:17:26 +0000
+++ src/osd/PG.cc 2011-03-28 07:08:46 +0000
@@ -2742,70 +2742,175 @@
2742// ==========================================================================================2742// ==========================================================================================
2743// SCRUB2743// SCRUB
27442744
2745/*2745<<<<<<< TREE
2746 * when holding pg and sched_scrub_lock, then the states are:2746/*
2747 * scheduling:2747 * when holding pg and sched_scrub_lock, then the states are:
2748 * scrub_reserved = true2748 * scheduling:
2749 * scrub_rserved_peers includes whoami2749 * scrub_reserved = true
2750 * osd->scrub_pending++2750 * scrub_rserved_peers includes whoami
2751 * scheduling, replica declined:2751 * osd->scrub_pending++
2752 * scrub_reserved = true2752 * scheduling, replica declined:
2753 * scrub_reserved_peers includes -12753 * scrub_reserved = true
2754 * osd->scrub_pending++2754 * scrub_reserved_peers includes -1
2755 * pending:2755 * osd->scrub_pending++
2756 * scrub_reserved = true2756 * pending:
2757 * scrub_reserved_peers.size() == acting.size();2757 * scrub_reserved = true
2758 * pg on scrub_wq2758 * scrub_reserved_peers.size() == acting.size();
2759 * osd->scrub_pending++2759 * pg on scrub_wq
2760 * scrubbing:2760 * osd->scrub_pending++
2761 * scrub_reserved = false;2761 * scrubbing:
2762 * scrub_reserved_peers empty2762 * scrub_reserved = false;
2763 * osd->scrub_active++2763 * scrub_reserved_peers empty
2764 */2764 * osd->scrub_active++
27652765 */
2766// returns false if waiting for a reply2766
2767bool PG::sched_scrub()2767// returns false if waiting for a reply
2768{2768bool PG::sched_scrub()
2769 assert(_lock.is_locked());2769=======
2770 if (!(is_primary() && is_active() && is_clean() && !is_scrubbing())) {2770/*
2771 return true;2771 * when holding pg and sched_scrub_lock, then the states are:
2772 }2772 * scheduling:
27732773 * scrub_reserved = true
2774 // just scrubbed?2774 * scrub_rserved_peers includes whoami
2775 if (info.history.last_scrub_stamp + g_conf.osd_scrub_min_interval > g_clock.now()) {2775 * osd->scrub_pending++
2776 dout(20) << "sched_scrub: just scrubbed, skipping" << dendl;2776 * scheduling, replica declined:
2777 return true;2777 * scrub_reserved = true
2778 }2778 * scrub_reserved_peers includes -1
27792779 * osd->scrub_pending++
2780 bool ret = false;2780 * pending:
2781 if (!scrub_reserved) {2781 * scrub_reserved = true
2782 assert(scrub_reserved_peers.empty());2782 * scrub_reserved_peers.size() == acting.size();
2783 if (osd->inc_scrubs_pending()) {2783 * pg on scrub_wq
2784 dout(20) << "sched_scrub: reserved locally, reserving replicas" << dendl;2784 * osd->scrub_pending++
2785 scrub_reserved = true;2785 * scrubbing:
2786 scrub_reserved_peers.insert(osd->whoami);2786 * scrub_reserved = false;
2787 scrub_reserve_replicas();2787 * scrub_reserved_peers empty
2788 } else {2788 * osd->scrub_active++
2789 dout(20) << "sched_scrub: failed to reserve locally" << dendl;2789 */
2790 }2790
2791 }2791// returns false if waiting for a reply
2792 if (scrub_reserved) {2792bool PG::sched_scrub()
2793 if (scrub_reserve_failed) {2793{
2794 dout(20) << "sched_scrub: failed, a peer declined" << dendl;2794 assert(_lock.is_locked());
2795 clear_scrub_reserved();2795 if (!(is_primary() && is_active() && is_clean() && !is_scrubbing())) {
2796 scrub_unreserve_replicas();2796 return true;
2797 ret = true;2797 }
2798 } else if (scrub_reserved_peers.size() == acting.size()) {2798
2799 dout(20) << "sched_scrub: success, reserved self and replicas" << dendl;2799 // just scrubbed?
2800 osd->scrub_wq.queue(this);2800 if (info.history.last_scrub_stamp + g_conf.osd_scrub_min_interval > g_clock.now()) {
2801 ret = true;2801 dout(20) << "sched_scrub: just scrubbed, skipping" << dendl;
2802 } else {2802 return true;
2803 // none declined, since scrub_reserved is set2803 }
2804 dout(20) << "sched_scrub: reserved " << scrub_reserved_peers << ", waiting for replicas" << dendl;2804
2805 }2805 bool ret = false;
2806 }2806 if (!scrub_reserved) {
28072807 assert(scrub_reserved_peers.empty());
2808 return ret;2808 if (osd->inc_scrubs_pending()) {
2809 dout(20) << "sched_scrub: reserved locally, reserving replicas" << dendl;
2810 scrub_reserved = true;
2811 scrub_reserved_peers.insert(osd->whoami);
2812 scrub_reserve_replicas();
2813 } else {
2814 dout(20) << "sched_scrub: failed to reserve locally" << dendl;
2815 }
2816 }
2817 if (scrub_reserved) {
2818 if (scrub_reserve_failed) {
2819 dout(20) << "sched_scrub: failed, a peer declined" << dendl;
2820 clear_scrub_reserved();
2821 scrub_unreserve_replicas();
2822 ret = true;
2823 } else if (scrub_reserved_peers.size() == acting.size()) {
2824 dout(20) << "sched_scrub: success, reserved self and replicas" << dendl;
2825 osd->scrub_wq.queue(this);
2826 ret = true;
2827 } else {
2828 // none declined, since scrub_reserved is set
2829 dout(20) << "sched_scrub: reserved " << scrub_reserved_peers << ", waiting for replicas" << dendl;
2830 }
2831 }
2832
2833 return ret;
2834}
2835
2836void PG::sub_op_scrub(MOSDSubOp *op)
2837>>>>>>> MERGE-SOURCE
2838{
2839<<<<<<< TREE
2840 assert(_lock.is_locked());
2841 if (!(is_primary() && is_active() && is_clean() && !is_scrubbing())) {
2842 return true;
2843 }
2844
2845 // just scrubbed?
2846 if (info.history.last_scrub_stamp + g_conf.osd_scrub_min_interval > g_clock.now()) {
2847 dout(20) << "sched_scrub: just scrubbed, skipping" << dendl;
2848 return true;
2849 }
2850
2851 bool ret = false;
2852 if (!scrub_reserved) {
2853 assert(scrub_reserved_peers.empty());
2854 if (osd->inc_scrubs_pending()) {
2855 dout(20) << "sched_scrub: reserved locally, reserving replicas" << dendl;
2856 scrub_reserved = true;
2857 scrub_reserved_peers.insert(osd->whoami);
2858 scrub_reserve_replicas();
2859 } else {
2860 dout(20) << "sched_scrub: failed to reserve locally" << dendl;
2861 }
2862 }
2863 if (scrub_reserved) {
2864 if (scrub_reserve_failed) {
2865 dout(20) << "sched_scrub: failed, a peer declined" << dendl;
2866 clear_scrub_reserved();
2867 scrub_unreserve_replicas();
2868 ret = true;
2869 } else if (scrub_reserved_peers.size() == acting.size()) {
2870 dout(20) << "sched_scrub: success, reserved self and replicas" << dendl;
2871 osd->scrub_wq.queue(this);
2872 ret = true;
2873 } else {
2874 // none declined, since scrub_reserved is set
2875 dout(20) << "sched_scrub: reserved " << scrub_reserved_peers << ", waiting for replicas" << dendl;
2876 }
2877 }
2878
2879 return ret;
2880=======
2881 dout(7) << "sub_op_scrub" << dendl;
2882
2883 if (op->map_epoch < info.history.same_acting_since) {
2884 dout(10) << "sub_op_scrub discarding old sub_op from "
2885 << op->map_epoch << " < " << info.history.same_acting_since << dendl;
2886 op->put();
2887 return;
2888 }
2889
2890 ScrubMap map;
2891 if (op->version > eversion_t()) {
2892 epoch_t epoch = info.history.same_acting_since;
2893 finalizing_scrub = 1;
2894 while (last_update_applied != info.last_update) {
2895 wait();
2896 if (epoch != info.history.same_acting_since ||
2897 osd->is_stopping()) {
2898 dout(10) << "scrub pg changed, aborting" << dendl;
2899 return;
2900 }
2901 }
2902 build_inc_scrub_map(map, op->version);
2903 finalizing_scrub = 0;
2904 } else {
2905 build_scrub_map(map);
2906 }
2907
2908 MOSDSubOpReply *reply = new MOSDSubOpReply(op, 0, osd->osdmap->get_epoch(), CEPH_OSD_FLAG_ACK);
2909 ::encode(map, reply->get_data());
2910 osd->cluster_messenger->send_message(reply, op->get_connection());
2911
2912 op->put();
2913>>>>>>> MERGE-SOURCE
2809}2914}
28102915
28112916
@@ -2834,6 +2939,7 @@
2834 op->put();2939 op->put();
2835}2940}
28362941
2942<<<<<<< TREE
2837/* 2943/*
2838 * pg lock may or may not be held2944 * pg lock may or may not be held
2839 */2945 */
@@ -2984,6 +3090,164 @@
2984 osd->cluster_messenger->send_message(subop, osd->osdmap->get_cluster_inst(acting[i]));3090 osd->cluster_messenger->send_message(subop, osd->osdmap->get_cluster_inst(acting[i]));
2985 }3091 }
2986}3092}
3093=======
3094/*
3095 * pg lock may or may not be held
3096 */
3097void PG::_scan_list(ScrubMap &map, vector<sobject_t> &ls)
3098{
3099 dout(10) << "_scan_list scanning " << ls.size() << " objects" << dendl;
3100 int i = 0;
3101 for (vector<sobject_t>::iterator p = ls.begin();
3102 p != ls.end();
3103 p++, i++) {
3104 sobject_t poid = *p;
3105
3106 struct stat st;
3107 int r = osd->store->stat(coll, poid, &st);
3108 if (r == 0) {
3109 ScrubMap::object &o = map.objects[poid];
3110 o.size = st.st_size;
3111 osd->store->getattrs(coll, poid, o.attrs);
3112 dout(25) << "_scan_list " << poid << dendl;
3113 } else {
3114 dout(25) << "_scan_list " << poid << " got " << r << ", skipping" << dendl;
3115 }
3116 }
3117}
3118
3119void PG::_request_scrub_map(int replica, eversion_t version)
3120{
3121 dout(10) << "scrub requesting scrubmap from osd" << replica << dendl;
3122 vector<OSDOp> scrub(1);
3123 scrub[0].op.op = CEPH_OSD_OP_SCRUB;
3124 sobject_t poid;
3125 eversion_t v = version;
3126 osd_reqid_t reqid;
3127 MOSDSubOp *subop = new MOSDSubOp(reqid, info.pgid, poid, false, 0,
3128 osd->osdmap->get_epoch(), osd->get_tid(), v);
3129 subop->ops = scrub;
3130 osd->cluster_messenger->send_message(subop, //new MOSDPGScrub(info.pgid, osd->osdmap->get_epoch()),
3131 osd->osdmap->get_cluster_inst(replica));
3132}
3133
3134void PG::sub_op_scrub_reserve(MOSDSubOp *op)
3135{
3136 dout(7) << "sub_op_scrub_reserve" << dendl;
3137
3138 if (scrub_reserved) {
3139 dout(10) << "Ignoring reserve request: Already reserved" << dendl;
3140 op->put();
3141 return;
3142 }
3143
3144 scrub_reserved = osd->inc_scrubs_pending();
3145
3146 MOSDSubOpReply *reply = new MOSDSubOpReply(op, 0, osd->osdmap->get_epoch(), CEPH_OSD_FLAG_ACK);
3147 ::encode(scrub_reserved, reply->get_data());
3148 osd->cluster_messenger->send_message(reply, op->get_connection());
3149
3150 op->put();
3151}
3152
3153void PG::sub_op_scrub_reserve_reply(MOSDSubOpReply *op)
3154{
3155 dout(7) << "sub_op_scrub_reserve_reply" << dendl;
3156
3157 if (!scrub_reserved) {
3158 dout(10) << "ignoring obsolete scrub reserve reply" << dendl;
3159 op->put();
3160 return;
3161 }
3162
3163 int from = op->get_source().num();
3164 bufferlist::iterator p = op->get_data().begin();
3165 bool reserved;
3166 ::decode(reserved, p);
3167
3168 if (scrub_reserved_peers.find(from) != scrub_reserved_peers.end()) {
3169 dout(10) << " already had osd" << from << " reserved" << dendl;
3170 } else {
3171 if (reserved) {
3172 dout(10) << " osd" << from << " scrub reserve = success" << dendl;
3173 scrub_reserved_peers.insert(from);
3174 } else {
3175 /* One decline stops this pg from being scheduled for scrubbing. */
3176 dout(10) << " osd" << from << " scrub reserve = fail" << dendl;
3177 scrub_reserve_failed = true;
3178 }
3179 sched_scrub();
3180 }
3181
3182 op->put();
3183}
3184
3185void PG::sub_op_scrub_unreserve(MOSDSubOp *op)
3186{
3187 dout(7) << "sub_op_scrub_unreserve" << dendl;
3188
3189 clear_scrub_reserved();
3190
3191 op->put();
3192}
3193
3194void PG::sub_op_scrub_stop(MOSDSubOp *op)
3195{
3196 dout(7) << "sub_op_scrub_stop" << dendl;
3197
3198 // see comment in sub_op_scrub_reserve
3199 scrub_reserved = false;
3200
3201 MOSDSubOpReply *reply = new MOSDSubOpReply(op, 0, osd->osdmap->get_epoch(), CEPH_OSD_FLAG_ACK);
3202 osd->cluster_messenger->send_message(reply, op->get_connection());
3203
3204 op->put();
3205}
3206
3207void PG::clear_scrub_reserved()
3208{
3209 osd->scrub_wq.dequeue(this);
3210 scrub_reserved_peers.clear();
3211 scrub_reserve_failed = false;
3212
3213 if (scrub_reserved) {
3214 scrub_reserved = false;
3215 osd->dec_scrubs_pending();
3216 }
3217}
3218
3219void PG::scrub_reserve_replicas()
3220{
3221 for (unsigned i=1; i<acting.size(); i++) {
3222 dout(10) << "scrub requesting reserve from osd" << acting[i] << dendl;
3223 vector<OSDOp> scrub(1);
3224 scrub[0].op.op = CEPH_OSD_OP_SCRUB_RESERVE;
3225 sobject_t poid;
3226 eversion_t v;
3227 osd_reqid_t reqid;
3228 MOSDSubOp *subop = new MOSDSubOp(reqid, info.pgid, poid, false, 0,
3229 osd->osdmap->get_epoch(), osd->get_tid(), v);
3230 subop->ops = scrub;
3231 osd->cluster_messenger->send_message(subop, osd->osdmap->get_cluster_inst(acting[i]));
3232 }
3233}
3234
3235void PG::scrub_unreserve_replicas()
3236{
3237 for (unsigned i=1; i<acting.size(); i++) {
3238 dout(10) << "scrub requesting unreserve from osd" << acting[i] << dendl;
3239 vector<OSDOp> scrub(1);
3240 scrub[0].op.op = CEPH_OSD_OP_SCRUB_UNRESERVE;
3241 sobject_t poid;
3242 eversion_t v;
3243 osd_reqid_t reqid;
3244 MOSDSubOp *subop = new MOSDSubOp(reqid, info.pgid, poid, false, 0,
3245 osd->osdmap->get_epoch(), osd->get_tid(), v);
3246 subop->ops = scrub;
3247 osd->cluster_messenger->send_message(subop, osd->osdmap->get_cluster_inst(acting[i]));
3248 }
3249}
3250>>>>>>> MERGE-SOURCE
29873251
2988/*3252/*
2989 * build a (sorted) summary of pg content for purposes of scrubbing3253 * build a (sorted) summary of pg content for purposes of scrubbing
29903254
=== modified file 'src/osd/PG.h'
--- src/osd/PG.h 2011-02-25 15:17:26 +0000
+++ src/osd/PG.h 2011-03-28 07:08:46 +0000
@@ -904,6 +904,7 @@
904 void build_scrub_map(ScrubMap &map);904 void build_scrub_map(ScrubMap &map);
905 void build_inc_scrub_map(ScrubMap &map, eversion_t v);905 void build_inc_scrub_map(ScrubMap &map, eversion_t v);
906 virtual int _scrub(ScrubMap &map, int& errors, int& fixed) { return 0; }906 virtual int _scrub(ScrubMap &map, int& errors, int& fixed) { return 0; }
907<<<<<<< TREE
907 void clear_scrub_reserved();908 void clear_scrub_reserved();
908 void scrub_reserve_replicas();909 void scrub_reserve_replicas();
909 void scrub_unreserve_replicas();910 void scrub_unreserve_replicas();
@@ -916,6 +917,20 @@
916 void sub_op_scrub_reserve_reply(class MOSDSubOpReply *op);917 void sub_op_scrub_reserve_reply(class MOSDSubOpReply *op);
917 void sub_op_scrub_unreserve(class MOSDSubOp *op);918 void sub_op_scrub_unreserve(class MOSDSubOp *op);
918 void sub_op_scrub_stop(class MOSDSubOp *op);919 void sub_op_scrub_stop(class MOSDSubOp *op);
920=======
921 void clear_scrub_reserved();
922 void scrub_reserve_replicas();
923 void scrub_unreserve_replicas();
924 bool scrub_all_replicas_reserved() const;
925 bool sched_scrub();
926
927 void sub_op_scrub(class MOSDSubOp *op);
928 void sub_op_scrub_reply(class MOSDSubOpReply *op);
929 void sub_op_scrub_reserve(class MOSDSubOp *op);
930 void sub_op_scrub_reserve_reply(class MOSDSubOpReply *op);
931 void sub_op_scrub_unreserve(class MOSDSubOp *op);
932 void sub_op_scrub_stop(class MOSDSubOp *op);
933>>>>>>> MERGE-SOURCE
919934
920 public: 935 public:
921 PG(OSD *o, PGPool *_pool, pg_t p, const sobject_t& loid, const sobject_t& ioid) : 936 PG(OSD *o, PGPool *_pool, pg_t p, const sobject_t& loid, const sobject_t& ioid) :
922937
=== modified file 'src/osd/ReplicatedPG.cc'
--- src/osd/ReplicatedPG.cc 2011-02-25 15:17:26 +0000
+++ src/osd/ReplicatedPG.cc 2011-03-28 07:08:46 +0000
@@ -493,6 +493,15 @@
493 case CEPH_OSD_OP_SCRUB_MAP:493 case CEPH_OSD_OP_SCRUB_MAP:
494 sub_op_scrub_map(op);494 sub_op_scrub_map(op);
495 return;495 return;
496 case CEPH_OSD_OP_SCRUB_RESERVE:
497 sub_op_scrub_reserve(op);
498 return;
499 case CEPH_OSD_OP_SCRUB_UNRESERVE:
500 sub_op_scrub_unreserve(op);
501 return;
502 case CEPH_OSD_OP_SCRUB_STOP:
503 sub_op_scrub_stop(op);
504 return;
496 }505 }
497 }506 }
498507
@@ -508,6 +517,16 @@
508 // continue peer recovery517 // continue peer recovery
509 sub_op_push_reply(r);518 sub_op_push_reply(r);
510 return;519 return;
520<<<<<<< TREE
521
522 case CEPH_OSD_OP_SCRUB_RESERVE:
523 sub_op_scrub_reserve_reply(r);
524=======
525
526 case CEPH_OSD_OP_SCRUB:
527 sub_op_scrub_reply(r);
528>>>>>>> MERGE-SOURCE
529 return;
511530
512 case CEPH_OSD_OP_SCRUB_RESERVE:531 case CEPH_OSD_OP_SCRUB_RESERVE:
513 sub_op_scrub_reserve_reply(r);532 sub_op_scrub_reserve_reply(r);
@@ -521,6 +540,7 @@
521540
522bool ReplicatedPG::snap_trimmer()541bool ReplicatedPG::snap_trimmer()
523{542{
543 assert(is_primary() && is_clean());
524 lock();544 lock();
525 if (!(is_primary() && is_clean() && is_active())) {545 if (!(is_primary() && is_clean() && is_active())) {
526 unlock();546 unlock();
@@ -1654,8 +1674,14 @@
1654 assert(0);1674 assert(0);
1655 }1675 }
1656 } else { //we got our context, let's use it to do the rollback!1676 } else { //we got our context, let's use it to do the rollback!
1677<<<<<<< TREE
1657 sobject_t& rollback_to_sobject = rollback_to->obs.oi.soid;1678 sobject_t& rollback_to_sobject = rollback_to->obs.oi.soid;
1658 if (ctx->clone_obc && *ctx->clone_obc->obs.oi.snaps.rbegin() <= snapid) {1679 if (ctx->clone_obc && *ctx->clone_obc->obs.oi.snaps.rbegin() <= snapid) {
1680=======
1681 sobject_t& rollback_to_sobject = rollback_to->obs.oi.soid;
1682 if (ctx->clone_obc &&
1683 (ctx->clone_obc->obs.oi.soid.snap == snapid)) {
1684>>>>>>> MERGE-SOURCE
1659 //just cloned the rollback target, we don't need to do anything!1685 //just cloned the rollback target, we don't need to do anything!
1660 } else {1686 } else {
1661 /* 1) Delete current head1687 /* 1) Delete current head

Subscribers

People subscribed via source and target branches

to all changes: