sh.status was showing a successful migration when there weren't any and I tried it down to this function sh.getRecentMigrations() reporting this as success:
db.changelog.aggregate( [ { $match : { time : { $gt : yesterday }, what : "moveChunk.from", "details.errmsg" : { "$exists" : false } } }]).toArray() [ { "_id" : "tugc2.mongodb.com-2015-01-22T01:20:49-54c050716fa2c02a2608c1f5", "server" : "tugc2.mongodb.com", "clientAddr" : "50.23.195.163:56685", "time" : ISODate("2015-01-22T01:20:49.565Z"), "what" : "moveChunk.from", "ns" : "ycsb.usertable", "details" : { "min" : { "_id" : { "$minKey" : 1 } }, "max" : { "_id" : NumberLong("-3074457345618258602") }, "step 1 of 6" : 0, "step 2 of 6" : 31, "step 3 of 6" : 4, "to" : "ycsbTest1", "from" : "ycsbTest2", "note" : "aborted" } } ]
Clearly aborted != success. For inexplicable reasons it's looking for "errmsg" in "moveChunk.from" - rather than "details.note":"aborted" or something in the new actionlog?