Commit Graph

74 Commits

Author SHA1 Message Date
Avi Kivity
2720ba34bf db: shard data
Add database::shard_of() to compute the shard hosting the partition
(with a simplistic algorithm, but perhaps not too bad).

Convert non-metadata invoke_on_all() and local calls on the database
to use shard_of().
2015-02-23 11:37:12 +02:00
Avi Kivity
70381a6da5 db: distribute database object
s/database/distributed<database>/ everywhere.

Use simple distribution rules: writes are broadcast, reads are local.
This causes tremendous data duplication, but will change soon.
2015-02-19 17:53:13 +02:00
Avi Kivity
e8096ff2bb db: add database::stop()
Required by distributed<>'s contract.
2015-02-19 16:33:27 +02:00
Avi Kivity
8f9f794a73 db: make column_family::apply(mutation) not steal the contents
With replication, we want the contents of the mutation to be available
to multiple replicas.

(In this context, we will replicate the mutation to all shards in the same
node, as a temporary step in sharding a node; but the issue also occurs
when replicating to other nodes).
2015-02-19 16:23:09 +02:00
Avi Kivity
a2519926a6 db: add some iostream output operators
Helps debugging
2015-02-19 15:56:26 +02:00
Tomasz Grabiec
aaf9463568 db: Take names by const& in find_*() functions 2015-02-12 19:40:58 +01:00
Tomasz Grabiec
9a307918ef db: Cleanup comment 2015-02-12 19:40:58 +01:00
Tomasz Grabiec
06ccaa3b5b db: Move method definitions to source file 2015-02-12 19:40:56 +01:00
Tomasz Grabiec
fb6941bbee tests: Add test for row tombstones 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
7ea7a6822b db: Fix mutation_partition::apply_row_tombstone()
It was not updating already inserted tombstones.
2015-02-09 10:28:45 +01:00
Tomasz Grabiec
a6f4f2d6aa db: Add mutation_partition::tombstone_for_row() 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
0a5bf555ea types: Introduce tuple_type::is_prefix_of() 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
7b7f63645b db: Make tombstone::operator bool() explicit 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
37599d5d10 db: Define the rest of comparison operators in tombstone 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
0bde5f74e7 db: Introduce tombstone::compare() and express operators using it 2015-02-09 10:28:45 +01:00
Tomasz Grabiec
1b66f33455 db: Apply mutations locally from storage_proxy
Eventually we should rather send them to replicas, but for now we just
apply locally.
2015-02-09 10:28:44 +01:00
Tomasz Grabiec
2244eab6c1 db: Steal data from mutations when applying
Taking mutations by r-value reference allows us to avoid copies.
2015-02-09 10:28:44 +01:00
Tomasz Grabiec
d5a7f37c45 db: Merge api.hh into database.hh 2015-02-09 10:28:44 +01:00
Tomasz Grabiec
48c11a01db db: Add ability to apply mutations into the database
For simplicity partition data is stored using the same object which is
used for mutations: mutation_partition. Later we can introduce a more
efficient version.
2015-02-09 10:28:44 +01:00
Tomasz Grabiec
211f52e40a schema: Move to schema.hh 2015-02-09 10:28:44 +01:00
Tomasz Grabiec
609f6e0d31 schema: Add is_partition_key() tester 2015-02-04 10:29:04 +01:00
Tomasz Grabiec
77b37a7c03 schema: Add column_specification field to schema
In Origin, some places in CQL3 package treat ColumnDefinition as
ColumnSpecification. Origin solves that by making ColumnDefinition
extend ColumnSpecification.

I find it much simpler to provide an external adapter, which is cached
as a field for efficiency. Another, more important, reason for this
solution is that column_specifications are passed around as
shared_ptrs and I don't want to add unnecessary indirection to
column_definition accesses just because of that, to make it inherit
from column_specification.
2015-02-04 10:29:04 +01:00
Tomasz Grabiec
654372f368 schema: Allow regular column names to have arbitrary type
Regular columns may have names of arbitrary type. See
https://issues.apache.org/jira/browse/CASSANDRA-8178

Primary key columns are UTF8.

This change also does some refactoring of the schema object to make
the change easier to digest (more encapsulation).
2015-02-04 10:29:00 +01:00
Tomasz Grabiec
b7cf3a679d Convert ThriftValidation.validateColumnFamily(String,String)
Unlike origin, we don't use global singleton, but accept a database
reference instead.
2015-02-04 10:28:59 +01:00
Tomasz Grabiec
cbe1a3d403 schema: Introduce schema::get_column_definition() 2015-02-04 10:28:56 +01:00
Tomasz Grabiec
6ba3732620 schema: Rename column_kind::PRIMARY -> column_kind::PARTITION
The old name was incorrect.
2015-02-04 10:28:51 +01:00
Tomasz Grabiec
64128dc117 cql3: Convert UpdateParameters 2015-01-29 18:55:24 +01:00
Tomasz Grabiec
333d1f259f Stub schema::is_dense() and schema::is_counter() 2015-01-29 18:55:24 +01:00
Tomasz Grabiec
34616107a9 Add column_definition::is_static() 2015-01-29 18:55:23 +01:00
Tomasz Grabiec
1cfcb5b09c Add column_definition.id
The ID will be used in mutation model.
2015-01-29 18:55:20 +01:00
Tomasz Grabiec
4d41d10d99 Extract schema to a separate class 2015-01-29 15:53:05 +01:00
Tomasz Grabiec
17b9babd91 Extract types related stuff from database.{cc,hh} to types.{cc,hh} 2015-01-29 15:02:19 +01:00
Tomasz Grabiec
c75468160a db: Use memcmp for comparing bytes
My bench-lie shows it's:
  - 1.2x faster for values of size 4 bytes
  - 4x faster for values of size 16 bytes
  - 9x faster for values of size 64 bytes
2015-01-29 14:43:36 +01:00
Asias He
8d737985b0 db: Convert db/composites/AbstractCType.java to C++ 2015-01-15 09:05:48 +08:00
Asias He
bf018615b8 Add abstract_type::is_byte_order_comparable 2015-01-15 09:05:48 +08:00
Asias He
20761a3cd9 Add abstract_type::is_compatible_with 2015-01-15 09:05:48 +08:00
Asias He
e4c7b77f1b Add abstract_type::validate_collection_member 2015-01-15 09:05:48 +08:00
Asias He
2dded3459a Add abstract_type::compare() 2015-01-15 09:05:48 +08:00
Asias He
18435837dd Add abstract_type::compare_unsigned() helper 2015-01-15 09:05:48 +08:00
Glauber Costa
7f96fc9509 db: read all keyspaces from directory structure
This patch includes a helper function that executes a function for each entry
in a directory. It is future based and can include in the future, future-based
code to asychronously read, for instance, an sstable.

At the moment, it only scan all keyspaces and make sure they appear in the
keyspaces hash.

Both the database and keyspace classes gain a populate<T> factory that returns a
populated database. At this point, the names found are just listed, but not really
stored anywhere.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-01-13 10:41:13 +02:00
Avi Kivity
99489ff580 db: add uuid type 2015-01-12 14:21:19 +02:00
Avi Kivity
30ba3ecea2 db: add runtime_exception class 2015-01-12 11:19:11 +02:00
Avi Kivity
df83ccec41 db: add bytes_opt (=optional<bytes>) 2015-01-12 11:18:47 +02:00
Avi Kivity
c05640fb5d db: add to_hex(bytes) 2015-01-12 11:18:25 +02:00
Avi Kivity
a7723cf641 db: add timestamp type
Based on db_clock::time_point
2015-01-11 15:46:03 +02:00
Avi Kivity
a5c98d32c3 db: add timeuuid type 2015-01-11 15:46:03 +02:00
Pekka Enberg
b3611b205d db: Add data_type::compose() function
It's part of the AbstractType class signature.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-01-07 17:05:28 +02:00
Pekka Enberg
7c38147c07 db: Add data_type::validate() stub
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-01-07 16:23:48 +02:00
Avi Kivity
aa1e02ab46 Merge branch 'types' into db
More type work.

Reviewed-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-01-07 13:57:15 +02:00
Avi Kivity
cfd86d70f8 db: extract default compare method into a default_less<> helper
The helper is a little more flexible in that it accepts a comparator,
instead of using <.
2015-01-06 15:26:45 +02:00