Commit 7662d8ff57d2b00ce8f7fe0b60a85efbb2c05652

Authored by Sage Weil
1 parent 9db4b3e327

libceph: handle new osdmap down/state change encoding

Old incrementals encode a 0 value (nearly always) when an osd goes down.
Change that to allow any state bit(s) to be flipped.  Special case 0 to
mean flip the CEPH_OSD_UP bit to mimic the old behavior.

Signed-off-by: Sage Weil <sage@newdream.net>

Showing 1 changed file with 8 additions and 3 deletions Side-by-side Diff

... ... @@ -830,15 +830,20 @@
830 830 map->osd_addr[osd] = addr;
831 831 }
832 832  
833   - /* new_down */
  833 + /* new_state */
834 834 ceph_decode_32_safe(p, end, len, bad);
835 835 while (len--) {
836 836 u32 osd;
  837 + u8 xorstate;
837 838 ceph_decode_32_safe(p, end, osd, bad);
  839 + xorstate = **(u8 **)p;
838 840 (*p)++; /* clean flag */
839   - pr_info("osd%d down\n", osd);
  841 + if (xorstate == 0)
  842 + xorstate = CEPH_OSD_UP;
  843 + if (xorstate & CEPH_OSD_UP)
  844 + pr_info("osd%d down\n", osd);
840 845 if (osd < map->max_osd)
841   - map->osd_state[osd] &= ~CEPH_OSD_UP;
  846 + map->osd_state[osd] ^= xorstate;
842 847 }
843 848  
844 849 /* new_weight */