diff options
-rw-r--r-- | conductor/conductor/common/models/plan.py | 8 | ||||
-rw-r--r-- | conductor/conductor/common/music/api.py | 21 | ||||
-rw-r--r-- | conductor/conductor/common/music/model/base.py | 13 |
3 files changed, 42 insertions, 0 deletions
diff --git a/conductor/conductor/common/models/plan.py b/conductor/conductor/common/models/plan.py index 1c293c0..de5af5b 100644 --- a/conductor/conductor/common/models/plan.py +++ b/conductor/conductor/common/models/plan.py @@ -115,6 +115,14 @@ class Plan(base.Base): return schema @classmethod + def indexes(cls): + """Return indexes """ + indexes = [ + 'status' + ] + return indexes + + @classmethod def atomic(cls): """Use atomic operations""" return False diff --git a/conductor/conductor/common/music/api.py b/conductor/conductor/common/music/api.py index c212a29..dc351c6 100644 --- a/conductor/conductor/common/music/api.py +++ b/conductor/conductor/common/music/api.py @@ -473,6 +473,17 @@ class MusicAPI(object): response = self.rest.request(method='post', path=path, data=data) return response + def index_create(self, keyspace, table, index): + + """Create indexes for a particular table""" + + path = '/keyspaces/%(keyspace)s/tables/%(table)s/index/%(field)s' % { + 'keyspace': keyspace, + 'table': table, + 'field': index + } + response = self.rest.request(method='post', path=path) + return response def row_complex_field_update(self, keyspace, table, pk_name, pk_value, plan_id, updated_fields, values): @@ -580,6 +591,9 @@ class MockAPI(object): def _set_table(self, keyspace, table): self._keyspaces[keyspace][table] = {} + def _set_index(self, keyspace, table): + self._keyspaces[keyspace][table] = {} + def _unset_table(self, keyspace, table): self._keyspaces[keyspace].pop(table) @@ -653,6 +667,13 @@ class MockAPI(object): self._set_table(keyspace, table) return True + def index_create(self, keyspace, table, index=None): + """Creates a index.""" + if CONF.music_api.debug: + LOG.debug("Creating index {}, keyspace {}".format(table, keyspace)) + self._set_index(keyspace, table) + return True + def table_delete(self, keyspace, table): """Creates a table.""" if CONF.music_api.debug: diff --git a/conductor/conductor/common/music/model/base.py b/conductor/conductor/common/music/model/base.py index 0b6f638..9e8205f 100644 --- a/conductor/conductor/common/music/model/base.py +++ b/conductor/conductor/common/music/model/base.py @@ -69,6 +69,13 @@ class Base(object): kwargs['schema'] = cls.schema() api.MUSIC_API.table_create(**kwargs) + # Create indexes for the table + del kwargs['schema'] + if cls.indexes(): + for index in cls.indexes(): + kwargs['index'] = index + api.MUSIC_API.index_create(**kwargs) + @abstractclassmethod def atomic(cls): """Use atomic operations""" @@ -79,6 +86,12 @@ class Base(object): """Return schema""" return cls() + @classmethod + def indexes(cls): + """Return Indexes""" + pass + # return cls() + @abstractclassmethod def pk_name(cls): """Primary key name""" |