diff --git a/nova/db/api.py b/nova/db/api.py
index 69a521b18..b2cf4781c 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -584,6 +584,17 @@ def migration_get_in_progress_by_instance(context, instance_uuid,
                                                       migration_type)
 
 
+def migration_get_by_sort_filters(context, sort_keys, sort_dirs, values):
+    """Get the uuid of the first migration in a sort order.
+
+    Return the first migration (uuid) of the set where each column value
+    is greater than or equal to the matching one in @values, for each key
+    in @sort_keys.
+    """
+    return IMPL.migration_get_by_sort_filters(context, sort_keys, sort_dirs,
+                                              values)
+
+
 ####################
 
 
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 13171f7fa..190d57959 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -2268,6 +2268,12 @@ def instance_get_by_sort_filters(context, sort_keys, sort_dirs, values):
     """
 
     model = models.Instance
+    return _model_get_uuid_by_sort_filters(context, model, sort_keys,
+                                           sort_dirs, values)
+
+
+def _model_get_uuid_by_sort_filters(context, model, sort_keys, sort_dirs,
+                                    values):
     query = context.session.query(model.uuid)
 
     # NOTE(danms): Below is a re-implementation of our
@@ -4398,6 +4404,12 @@ def migration_get_all_by_filters(context, filters,
         return []
 
     query = model_query(context, models.Migration)
+    if "uuid" in filters:
+        # The uuid filter is here for the MigrationLister and multi-cell
+        # paging support in the compute API.
+        uuid = filters["uuid"]
+        uuid = [uuid] if isinstance(uuid, six.string_types) else uuid
+        query = query.filter(models.Migration.uuid.in_(uuid))
     if 'changes-since' in filters:
         changes_since = timeutils.normalize_time(filters['changes-since'])
         query = query. \
@@ -4441,6 +4453,20 @@ def migration_get_all_by_filters(context, filters,
         return query.all()
 
 
+@require_context
+@pick_context_manager_reader_allow_async
+def migration_get_by_sort_filters(context, sort_keys, sort_dirs, values):
+    """Attempt to get a single migration based on a combination of sort
+    keys, directions and filter values. This is used to try to find a
+    marker migration when we don't have a marker uuid.
+
+    This returns just a uuid of the migration that matched.
+    """
+    model = models.Migration
+    return _model_get_uuid_by_sort_filters(context, model, sort_keys,
+                                           sort_dirs, values)
+
+
 @pick_context_manager_writer
 def migration_migrate_to_uuid(context, count):
     # Avoid circular import