Commit Graph

325 Commits

Author SHA1 Message Date
Avi Kivity
dd29ac9593 Merge "cqlsh" from Glauber
System table Work to make cqlsh connect.
2015-07-07 19:33:23 +03:00
Glauber Costa
ba33af1a8d service: split messaging service initialization in two parts
The messaging service is initialized very early, before we have the
proxy or query processor initialized. It is mostly fine, except for
the fact that the messaging service also finishes the initialization
of the storage service. That part will issue queries agains the system
tables, (as soon as we support them), and need to happen later.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-07 11:38:22 -04:00
Glauber Costa
fe6be361ba cql_tests: mark the client as external instead of external
What "internal" really means here, is queries that operate on the system tables.
Up until now, there wasn't really an issue because we weren't really checking
on this flag, and the internal calls were all unimplemented.

Now that we are about to hook up the internal calls, leaving this state marked
as internal will lead us to fail when we try to issue statements - like create
table - that are not, and will not be implemented in their internal
counterparts.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-07 11:38:22 -04:00
Avi Kivity
5d9222d935 Merge "Filter sstable data not belonging to current shard" from Tomasz
"We don't want multiple shards to respond with the same data. Higher level code
assumes that shard data is non-overlapping. It's cheaper to drop duplicates as
soon as possible. Memtable reader for example will never have overlapping
data, so cache hitting queries will never need to pay for this. Compaction
process may also rely on this."
2015-07-07 18:12:35 +03:00
Tomasz Grabiec
4dca9f4f09 tests: Add tests for make_filtering_reader() 2015-07-07 16:56:25 +02:00
Paweł Dziepak
752d9e6699 tests/type: add test cases for validation
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-07 13:58:57 +02:00
Paweł Dziepak
a7a231f8dc tests/cql: add tests for blobAs*() and *AsBlob() functions
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-07 11:32:21 +02:00
Paweł Dziepak
9b61d4d433 tests/types: add tests for timeuuid, uuid, timestamp and inet
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-06 23:46:09 +02:00
Paweł Dziepak
00da6e24fc tests/cql: test insert and select for all types
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-06 23:38:27 +02:00
Calle Wilund
ad12b7d21c Add query_processor_test
Testing execute_internal somewhat
2015-07-06 08:21:16 +02:00
Calle Wilund
5b30326953 Add query_processor accessor to cql_test_env 2015-07-06 08:21:16 +02:00
Paweł Dziepak
36e1fdcff4 tests/cql_query: test expiring cells
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-02 17:26:26 +02:00
Paweł Dziepak
dc23574580 tests/sstable: use 0 as current timestamp
For simplicity in expiration time computations 0 is used as current
timestamp, make sure that sstable write code is aware of that and
doesn't consider cells as already expired.

Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-02 17:26:10 +02:00
Tomasz Grabiec
f89ae4078f tests: Add test for querying a mutation 2015-07-02 14:51:28 +02:00
Tomasz Grabiec
f711e4e978 tests: Mark assert_that() inline instead of static 2015-07-02 14:51:28 +02:00
Tomasz Grabiec
eba6b492a6 tests: Introduce result_set assertions 2015-07-02 14:51:27 +02:00
Vlad Zolotarov
d1d8cae95e tests: network_topology_strategy_test
Unit test for NetworkTopologyStrategy class.
Creates a dummy cluster topology: token ring, token_metadata, snitch (RackInferringSnitch).
Then requests a natural endpoints for tokens that lay between each two adjacent ring tokens
and verifies the output.

It also checks the natural_endpoints caching:
   1) Verifies that the result is calculated when we query the specific token_ring point
      for the first time.
   2) Verifies that the result is taken from the cache when we query the specific token_ring
      point for the second time.
   3) Verifies that the results in (1) and (2) are identical.
   4) Verifies that the cache is invalidated after token_metadata::invalidate_cached_rings()
      is called.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
2015-06-29 18:50:55 +03:00
Paweł Dziepak
1c84a7231a tests/cql: improve compression tests
Check whether the created tables have actually the appropriate
compression parameters set.

Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-06-29 09:43:14 +02:00
Tomasz Grabiec
fe8ffd475c tests: Add test for comparing decorated_key with ring_position 2015-06-25 18:45:13 +02:00
Tomasz Grabiec
9ebb7e968d tests: Switch to schema_builder in partitioner_test 2015-06-25 18:45:13 +02:00
Avi Kivity
90412a2b26 Merge "Compression parameter fixes" from Paweł 2015-06-25 18:48:30 +03:00
Paweł Dziepak
89ede1fc00 schema: rename [set, get]_compressor to [set, get]_compressor_params
Compressor type is only a part of the information kept in compressor
parameters and things like schema.get_compressor().get_compressor()
do not look very good.

Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-06-25 17:05:53 +02:00
Tomasz Grabiec
6be8d30862 Merge tag 'avi/token-wraparound/v1' from seastar-dev.git
Fixes for token workaround from Avi:

"Tokens wrap around in a ring; if we have a range (t1, t2) where t1 > t2
the midpoint is not between them."
2015-06-25 16:01:20 +02:00
Avi Kivity
1a12438e5e tests: add token midpoint tests 2015-06-25 15:25:57 +03:00
Paweł Dziepak
335fe5ce50 tests/cql: add test for compression specific validation
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-06-25 14:17:59 +02:00
Nadav Har'El
0b297b9f6c sstable compaction: simplify compact_sstables() function
Instead of requiring the user to subclass a "sstable_creator" class to
specify how to create a new sstable (or in the future, several of them),
switch to an std::function.

In practice, it is much easier to specify a lambda than a class, especialy
since C++11 made it easy to capture variables into lambdas - but not into
local classes.

The "commit()" function is also unnecessary. Then intention there was to
provide a function to "commit" the new sstables (i.e., rename them).
But the caller doesn't need to supply this function - it can just wait
for the future of the end of compaction, and do his own committing code
right then.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-06-24 16:44:11 +03:00
Paweł Dziepak
3addb285cd tests/cql: test validation of keyspace and table creation requests
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-06-23 16:17:45 +02:00
Paweł Dziepak
26ff34060d tests/cql: add assert_that_failed()
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-06-23 16:17:45 +02:00
Tomasz Grabiec
de23b54764 types: Implement to_string()/from_string() for boolean_type 2015-06-23 17:07:37 +03:00
Vlad Zolotarov
efe1696410 cql_test_env: Start the global snitch before storage service
This order is required since 5e1348e741
(storage_service: Use get_local_snitch_ptr in gossip_snitch_info).

This fixes the breakage in the cql_query_test.

Reported-by: Asias He <asias@cloudius-systems.com>
Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
2015-06-23 16:36:27 +03:00
Tomasz Grabiec
d4e0e5957b db: Integrate cache with the read path 2015-06-23 13:49:25 +02:00
Tomasz Grabiec
d11773bc14 tests: Introduce row cache test 2015-06-23 13:49:24 +02:00
Tomasz Grabiec
2b5d9a917f tests: Convert mutation_reader_test to use seastar threads
Also extract assertions into header file.
2015-06-23 13:49:24 +02:00
Tomasz Grabiec
b9288d9fa7 db: Make column_family managed by lw_shared_ptr<>
It will be share-owned by readers.
2015-06-23 13:49:24 +02:00
Tomasz Grabiec
bdd3fd5019 tests: Add missing blank line 2015-06-23 13:44:37 +02:00
Avi Kivity
792a19d40d Merge "global snitch" from Vlad
"
   - Introduce a global distributed snitch object.
   - Add the corresponding methods in i_endpoint_snitch class needed to work with
     this object.
   - Added additional check to gossiping_property_file_snitch_test.
"
2015-06-23 10:49:30 +03:00
Nadav Har'El
9f7794752f sstables: basic compaction test
This tests the basic compaction functionality: I created three small
tables using Cassandra (see commands below), compact them into one,
load the resulting table and check its content.

This test demonstrates, but is commented out to make the test succeed,
a bug: If a partition had old values and then a newer deletion (tombstone)
in another sstable, both values and tombstones are left behind in the
compacted table.  This will be fixed (and the test uncommented) in a later
patch.

The three sstables were created with:

USE try1;
CREATE TABLE compaction (
	name text,
	age int,
	height int,
	PRIMARY KEY (name)
);
INSERT INTO compaction (name, age) VALUES ('nadav', 40);
INSERT INTO compaction (name, age) VALUES ('john', 30);
<flush>
INSERT INTO compaction (name, height) VALUES ('nadav', 186);
INSERT INTO compaction (name, age, height) VALUES ('jerry', 40, 170);
<flush>
DELETE FROM compaction WHERE name = 'nadav';
INSERT INTO compaction (name, age) VALUES ('john', 20);
INSERT INTO compaction (name, age, height) VALUES ('tom', 20, 180);

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-06-23 09:48:59 +03:00
Vlad Zolotarov
319491dad7 gossiping_property_file_snitch_test: check that the distribution
Check that the distribution of the new values between shards works.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
2015-06-22 23:18:40 +03:00
Vlad Zolotarov
3520d4de10 locator: introduce a global distributed<snitch_ptr> i_endpoint_snitch::snitch_instance()
Snitch class semantics defined to be per-Node. To make it so we
introduce here a static member in an i_endpoint_snitch class that
has to contain the pointer to the relevant snitch class instance.

Since the snitch contents are not always pure const it has to be per
shard, therefore we'll make it a "distributed". All the I/O is going
to take place on a single shard and if there are changes - they are going
to be propagated to the rest of the shards.

The application is responsible to initialize this distributed<shnitch>
before it's used for the first time.

This patch effectively reverts most of the "locator: futurize
snitch creation" a2594015f9 patch - the part that modifies the
code that was creating the snitch instance. Since snitch is
created explicitly by the application and all the rest of the code
simply assumes that the above global is initialized we won't need
all those changes any more and the code will get back to be nice and simple
as it was before the patch above.

So, to summarize, this patch does the following:
   - Reverts the changes introduced by a2594015f9 related to the fact that
     every time a replication strategy was created there should have been created
     a snitch that would have been stored in this strategy object. More specifically,
     methods like keyspace::create_replication_strategy() do not return a future<>
     any more and this allows to simplify the code that calls it significantly.
   - Introduce the global distributed<snitch_ptr> object:
      - It belongs to the i_endpoint_snitch class.
      - There has been added a corresponding interface to access both global and
        shard-local instances.
      - locator::abstract_replication_strategy::create_replication_strategy() does
        not accept snitch_ptr&& - it'll get and pass the corresponding shard-local
        instance of the snitch to the replication strategy's constructor by itself.
      - Adjusted the existing snitch infrastructure to the new semantics:
         - Modified the create_snitch() to create and start all per-shard snitch
           instances and update the global variable.
         - Introduced a static i_endpoint_snitch::stop_snitch() function that properly
           stops the global distributed snitch.
         - Added the code to the gossiping_property_file_snitch that distributes the
           changed data to all per-shard snitch objects.
         - Made all existing snitches classes properly maintain their state in order
           to be able to shut down cleanly.
         - Patched both urchin and cql_query_test to initialize a snitch instance before
           all other services.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>

New in v6:
   - Rebased to the current master.
   - Extended a commit message a little - the summary.

New in v5:
   - database::create_keyspace(): added a missing _keyspaces.emplace()

New in v4:
   - Kept the database::create_keyspace() to return future<> by Glauber's request
     and added a description to this method that needs to be changed when Glauber
     adds his bits that require this interface.
2015-06-22 23:18:31 +03:00
Glauber Costa
b008f8cf06 sstables: test table with wrong marker
Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-06-22 11:13:42 -04:00
Nadav Har'El
d7099358a7 tests: Fix shared/lw_shared mixup in test
In a couple of places in sstable_datafile_test.cc, we had
make_shared<memtable> instead of the usual make_lw_shared<memtable>.

It appears that since commit bc468f9a0e,
which made memtables inherit from enable_lw_shared_from_this (not the "lw"),
this no longer works correctly. I'm not sure I can really explain the
details of what's wrong, but with some refactoring I did on the sstable
writing code, it stopped working giving various strange crashes which appear
like the object protected by this shared_ptr got prematurely destructed.

Changing the test to use make_lw_shared() fixes the problems I was having.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-06-21 17:28:20 +03:00
Avi Kivity
f221301d5e Merge "preparation work - system table handling" from Glauber 2015-06-18 17:49:29 +03:00
Tomasz Grabiec
bc468f9a0e memtable: Make memtable inherit from enable_lw_shared_from_this 2015-06-18 15:48:21 +02:00
Tomasz Grabiec
370712f741 tests: Add mutation_reader_test 2015-06-18 15:47:40 +02:00
Glauber Costa
2a36eb7b6e cql_test_env: apply the vegas doctrine
"What happens in memory, stays in memory"

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-06-18 09:22:20 -04:00
Raphael S. Carvalho
7a0f4ab527 tests: test sstable snappy and deflate compressors
Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
2015-06-17 11:58:04 -03:00
Tomasz Grabiec
7964be8458 Merge branch 'glommer/summary-fix' from git@github.com:glommer/urchin.git
From Glauber:

"Shlomi found a bug when writing summary files under certain conditions.
The current patchset fixes it, while also performing some generally useful
cleanups."
2015-06-17 16:23:09 +02:00
Pekka Enberg
6a65b0e684 cql_query_test: Use CQL table with static columns
Use CQL for table creation now that static columns actually work.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-06-17 16:34:22 +03:00
Tomasz Grabiec
1767da1162 Merge branch 'penberg/cql-create-table-tests' from seastar-dev.git
From Pekka:

"This series improves the CQL test for 'create table' statement. It
hardens the test_create_statement() test case and converts
create_table() calls to use CQL where possible. Please note that we need
to go through the remaining create_table() call-sites and fix potential
issues in the CQL front-end or schema management code."
2015-06-17 15:24:25 +02:00
Gleb Natapov
a338407e29 make storage_proxy object distributed
storage_proxy holds per cpu state now to track clustering, so it has to
be distributed otherwise smp setup does not work.
2015-06-17 15:14:06 +02:00