Update with couch_index_updater:update/3

Handle '$gen_cast' messages in receive
diff --git a/src/couch_mrview_compactor.erl b/src/couch_mrview_compactor.erl
index d5ea763..50e7eae 100644
--- a/src/couch_mrview_compactor.erl
+++ b/src/couch_mrview_compactor.erl
@@ -149,32 +149,41 @@
 
 
 recompact(State) ->
-    RetryCount = config:get_integer("view_compaction", "recompact_retry_count",
-        ?DEFAULT_RECOMPACT_RETRY_COUNT),
-    recompact(State, RetryCount).
+    recompact(State, recompact_retry_count()).
 
-recompact(State, 0) ->
-    couch_log:error("couch_mrview_compactor:recompact max retries exceeded ~p",
-        [State]),
-    {ok, State};
-recompact(State, Attempt) ->
+recompact(_State, 0) ->
+    erlang:error(exceeded_recompact_retry_count);
+
+recompact(State, RetryCount) ->
+    Self = self(),
     link(State#mrst.fd),
     {Pid, Ref} = erlang:spawn_monitor(fun() ->
-        couch_index_updater:update(couch_mrview_index, State)
+        couch_index_updater:update(Self, couch_mrview_index, State)
     end),
+    recompact_loop(Pid, Ref, State, RetryCount).
+
+recompact_loop(Pid, Ref, State, RetryCount) ->
     receive
-        {'DOWN', Ref, _, _, Result} ->
+        {'$gen_cast', {new_state, State2}} ->
+            % We've made progress so reset RetryCount
+            recompact_loop(Pid, Ref, State2, recompact_retry_count());
+        {'DOWN', Ref, _, _, {updated, Pid, State2}} ->
             unlink(State#mrst.fd),
-            case Result of
-                {updated, Pid, State2} ->
-                    {ok, State2};
-                Error ->
-                    couch_log:info("couch_mrview_compactor:recompact error ~p",
-                        [Error]),
-                    recompact(State, Attempt - 1)
-            end
+            {ok, State2};
+        {'DOWN', Ref, _, _, Reason} ->
+            unlink(State#mrst.fd),
+            couch_log:warning("Error during recompaction: ~r", [Reason]),
+            recompact(State, RetryCount - 1)
     end.
 
+recompact_retry_count() ->
+    config:get_integer(
+        "view_compaction",
+        "recompact_retry_count",
+        ?DEFAULT_RECOMPACT_RETRY_COUNT
+    ).
+
+
 compact_log(LogBtree, BufferSize, Acc0) ->
     FoldFun = fun(KV, Acc) ->
         #acc{btree = Bt, kvs = Kvs, kvs_size = KvsSize} = Acc,