On Fri, 4 Jan 2013, Gregory Farnum wrote: > I think they might be different just as a consequence of being updated > less recently; that's where all of the lines whose origin I recognize > differ (not certain about the calc_parents stuff though). Sage can > confirm. In general, the crush files in mainline should track the same files in ceph.git master, modulo the #include lines at the top. 0.48argonaut is sufficiently old that the linux versions are actually newer. > The specific issue you encountered previously was of course because > you changed the layout algorithm and the client needs to be able to > process that layout itself. Yep! sage > -Greg > > On Thu, Dec 20, 2012 at 5:37 PM, Xing Lin <xinglin@xxxxxxxxxxx> wrote: > > This may be useful for other Ceph newbies just like me. > > > > I have ported my changes to 0.48argonaut to related Ceph files included in > > Linux, though files with the same name are not exactly the same. Then I > > recompiled and installed the kernel. After that, everything seems to be > > working again now: Ceph is working with my new simple replica placement > > algorithm. :) > > So, it seems that Ceph files included in the Linux kernel are supposed to be > > different from those in 0.48argonaut. Presumably, the Linux kernel contains > > the client-side implementation while 0.48argonaut contains the server-side > > implementation. It would be appreciated if someone can confirm it. Thank > > you! > > > > Xing > > > > > > On 12/20/2012 11:54 AM, Xing Lin wrote: > >> > >> Hi, > >> > >> I was trying to add a simple replica placement algorithm in Ceph. This > >> algorithm simply returns r_th item in a bucket for the r_th replica. I have > >> made that change in Ceph source code (including files such as crush.h, > >> crush.c, mapper.c, ...) and I can run Ceph monitor and osd daemons. However, > >> I am not able to map rbd block devices at client machines. 'rbd map image0' > >> reported "input/output error" and 'dmesg' at the client machine showed > >> message like "libceph: handle_map corrupt msg". I believe that is because I > >> have not ported my changes to Ceph client side programs and it does not > >> recognize the new placement algorithm. I probably need to recompile the rbd > >> block device driver. When I was trying to replace Ceph related files in > >> Linux with my own version, I noticed that files in Linux-3.2.16 are > >> different from these included in Ceph source code. For example, the > >> following is the diff of crush.h in Linux-3.2.16 and 0.48argonaut. So, my > >> question is that is there any version of Linux that contains the exact Ceph > >> files as included in 0.48argonaut? Thanks. > >> > >> ------------------- > >> $ diff -uNrp ceph-0.48argonaut/src/crush/crush.h > >> linux-3.2.16/include/linux/crush/crush.h > >> --- ceph-0.48argonaut/src/crush/crush.h 2012-06-26 11:56:36.000000000 > >> -0600 > >> +++ linux-3.2.16/include/linux/crush/crush.h 2012-04-22 > >> 16:31:32.000000000 -0600 > >> @@ -1,12 +1,7 @@ > >> #ifndef CEPH_CRUSH_CRUSH_H > >> #define CEPH_CRUSH_CRUSH_H > >> > >> -#if defined(__linux__) > >> #include <linux/types.h> > >> -#elif defined(__FreeBSD__) > >> -#include <sys/types.h> > >> -#include "include/inttypes.h" > >> -#endif > >> > >> /* > >> * CRUSH is a pseudo-random data distribution algorithm that > >> @@ -156,24 +151,25 @@ struct crush_map { > >> struct crush_bucket **buckets; > >> struct crush_rule **rules; > >> > >> + /* > >> + * Parent pointers to identify the parent bucket a device or > >> + * bucket in the hierarchy. If an item appears more than > >> + * once, this is the _last_ time it appeared (where buckets > >> + * are processed in bucket id order, from -1 on down to > >> + * -max_buckets. > >> + */ > >> + __u32 *bucket_parents; > >> + __u32 *device_parents; > >> + > >> __s32 max_buckets; > >> __u32 max_rules; > >> __s32 max_devices; > >> - > >> - /* choose local retries before re-descent */ > >> - __u32 choose_local_tries; > >> - /* choose local attempts using a fallback permutation before > >> - * re-descent */ > >> - __u32 choose_local_fallback_tries; > >> - /* choose attempts before giving up */ > >> - __u32 choose_total_tries; > >> - > >> - __u32 *choose_tries; > >> }; > >> > >> > >> /* crush.c */ > >> -extern int crush_get_bucket_item_weight(const struct crush_bucket *b, int > >> pos); > >> +extern int crush_get_bucket_item_weight(struct crush_bucket *b, int pos); > >> +extern void crush_calc_parents(struct crush_map *map); > >> extern void crush_destroy_bucket_uniform(struct crush_bucket_uniform *b); > >> extern void crush_destroy_bucket_list(struct crush_bucket_list *b); > >> extern void crush_destroy_bucket_tree(struct crush_bucket_tree *b); > >> @@ -181,9 +177,4 @@ extern void crush_destroy_bucket_straw(s > >> extern void crush_destroy_bucket(struct crush_bucket *b); > >> extern void crush_destroy(struct crush_map *map); > >> > >> -static inline int crush_calc_tree_node(int i) > >> -{ > >> - return ((i+1) << 1)-1; > >> -} > >> - > >> #endif > >> > >> ---- > >> Xing > >> -- > >> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > >> the body of a message to majordomo@xxxxxxxxxxxxxxx > >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > > > -- > > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html