anchor.diff:  -type object_generator_fun() :: fun(() -> binary()).
   -type object_processor_fun() :: fun((binary()) -> term()).
   
  --record(migration_worker, { %% Supervisor module that knows how to start workers
  -                            supervisor :: atom(),
  -                            %% fun that retrieves identifier for next
  +-record(migration_worker, { %% fun that retrieves identifier for next
                               %% object to run through worker
                               next_object_generator :: object_generator_fun(),
                               %% Processor function for generic workers
  
positive.code: migrate_next() ->
      migrate(1, 1).
  
  %% Start phase 1 org migration: clients, cookbooks, etc from couch to sql
  migrate(all, NumWorkers) ->
      migrate(-1, NumWorkers);
  migrate(NumOrgs, NumWorkers) ->
      Worker = #migration_worker{supervisor = mover_org_migrator_sup,
                                 callback_module = mover_phase_1_migrator_callback},
      gen_fsm:sync_send_event(?SERVER, {start, NumOrgs, NumWorkers, Worker}).
  
      gen_fsm:sync_send_event(?SERVER, {start, NumOrgs, NumWorkers, Worker}).
  
  %% Migrate user password hash from sha1 embedded in json to dedicated fields
  
negative.code: migrate_user_password_storage(all, NumWorkers) ->
      migrate_user_password_storage(-1, NumWorkers);
  migrate_user_password_storage(NumUsers, NumWorkers) ->
      Worker = #migration_worker{
                                 processor_fun = fun mover_user_hash_converter:convert_user/1,
                                 callback_module = mover_user_hash_converter_callback},
      gen_fsm:sync_send_event(?SERVER, {start, NumUsers, NumWorkers, Worker}).
  