Jump to: navigation, search

MagnetoDB/specs/async-schema-operations

< MagnetoDB
Revision as of 14:32, 18 September 2014 by Ikhudoshyn (talk | contribs) (Performance Impact)

Problem Description

Large amount of concurrent create/delete table operations creates huge load on Cassandra. In fact schema agreement process for some of the calls may take too much time so it results in timeout errors and corresponding tables stuck in CREATING/DELETING state forever.

Proposed Change

Storage manager as a RPC client

Implement storage manager that, rather than executing create/delete table calls directly, enqueues them to MQ shipped with Openstack via oslo.messaging.rpc. It should use non-blocking calls. RPC calls should only include request context as a dictionary and a table name. All necessary information about create/delete table parameters (table schema etc) should be retrieved from table_info_repo. In case of error during creating/deleting table on RPC server side, status of corresponding table should be set to ERROR

Magnetodb Schema Processor (RPC server)

Introduce separate executable, "magnetodb-schema-processor", that will run blocking RPC server which will execute create/delete table requests strictly one by one. Number of simultaneously running processes will effectively define the maximum allowed number of concurrent create/delete table requests.

Additionally, table status update time should be introduced. Each table status change should updade that attribute as well. During describe table call this attribute should be analyzed, whether table is in CREATING or DELETING status for a long time. If so, it's status should be changed to ERROR.

RPC settings

  • control_exchange: magnetodb
  • amqp_durable_queues: True
  • topic: schema

RPC calls

  • create(context, table_name)
  • delete(context, table_name)

Notifications Impact

RPC server should notify on table creation/deletion stat, end and error

Other End User Impact

TBD

Performance Impact

Create/Delete table operations are expected slower but much more reliably.

Deployment Impact

Magnetodb Schema Processor should be deployed to separate node or one of MagnetoDB API nodes

Developer Impact

None

Implementation

Current concept: at Cassandra node we run JMX-HTTP bridge agent (Jolokia). Client goes to MagnetoDB with REST-like interface (.../moninoting/{tenant_id}/table/{table_name}), MagnetoDB goes to Jolokia agent via HTTP, get JMX-metrics from Cassanra and returns them to client. If you have any suggestions about implementation - welcome to our IRC-channel at Freenode #magnetodb.

Assignee(s)

Primary assignee:

 <ikhudoshyn>

Other contributors:

 <None>


Work Items
Dependencies

Oslo.Messaging

Documentation Impact

Magnetodb Schema Processor deployment should be covered in corresponding doc (TBD)

References

Blueprint on Launchpad