I am looking at onClusterChanged() in TopologyAwareEnsemblePlacementPolicy.java and I believe we don't handle the following case.
1. Bookie Became RO. We remove this from known bookies and add it to readOnlyBookies. 2. Same bookie went down; Now the arguments, writableBookies has no change, and readOnlyBookies is NULL. At this point leftBookies, joinedBookies and deadBookies all get evaluated to NULL. Also the following check doesn't even update readOnlyBookies if (!readOnlyBookies.isEmpty()) { this.readOnlyBookies = ImmutableSet.copyOf(readOnlyBookies); } So we will continue to have down bookie as part of our readOnlyBookie. Am I missing something? -- Jvrao --- First they ignore you, then they laugh at you, then they fight you, then you win. - Mahatma Gandhi