--- Revision None +++ Revision 646664313236 @@ -0,0 +1,25 @@ +diff --git a/src/couchdb/couch_replicator.erl b/src/couchdb/couch_replicator.erl +index 315cec4..663ce27 100644 +--- a/src/couchdb/couch_replicator.erl ++++ b/src/couchdb/couch_replicator.erl +@@ -597,8 +597,18 @@ spawn_changes_reader(StartSeq, Db, ChangesQueue, Options) -> + read_changes(StartSeq, Db, ChangesQueue, Options) -> + try + couch_api_wrap:changes_since(Db, all_docs, StartSeq, +- fun(#doc_info{high_seq = Seq} = DocInfo) -> +- ok = couch_work_queue:queue(ChangesQueue, DocInfo), ++ fun(#doc_info{high_seq = Seq, id = Id} = DocInfo) -> ++ case Id of ++ <<>> -> ++ % Previous CouchDB releases had a bug which allowed a doc ++ % with an empty ID to be inserted into databases. Such doc ++ % is impossible to GET. ++ ?LOG_ERROR("Replicator: ignoring document with empty ID in " ++ "source database `~s` (_changes sequence ~p)", ++ [couch_api_wrap:db_uri(Db), Seq]); ++ _ -> ++ ok = couch_work_queue:queue(ChangesQueue, DocInfo) ++ end, + put(last_seq, Seq) + end, Options), + couch_work_queue:close(ChangesQueue)