Commit Graph

667 Commits

Author SHA1 Message Date
Nadav Har'El
630ccf5a09 sstables: remember to close() files
It is now necessary to close() a file before destroying it, otherwise a big
ugly warning message is printed by the reactor. Our sstable read path was
especially careless about closing the countless files it opens, and the
sstable test generated as many as 400 (!) of these warning messages, despite
running correctly. This patch adds the missing close() calls.

After this patch, the sstable test still shows 3 warning messages.
Those are unavoidable: They happen while broken sstables are being
tested, and an exception is thrown in the middle of the sstable processing,
causing us to destroy a file object without calling close() on it first.
This, in my opinion, proves that requiring close() in the read path is not
a good thing, it is un-RAII-like and not exception-safe. But it is benign
except the warning message, so whatever. 3 scary warning messages from the
test are better than 400...

If these 3 remaining messages really bother us, I guess we can fix it by
catching the exceptions in the sstable code, closing the file and rethrowing
the exception, but it will be quite ugly...

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-07-22 15:30:59 +03:00
Avi Kivity
8870bf1bf8 Merge "Handling of non-full partition range queries" from Tomasz 2015-07-22 15:18:02 +03:00
Tomasz Grabiec
5c647dffe9 tests: Add test for range queries on CQL level 2015-07-22 13:14:33 +02:00
Tomasz Grabiec
440962dbbf tests: Run mutation source tests on memtable 2015-07-22 13:14:33 +02:00
Tomasz Grabiec
0f3588708e tests: Extract range query tests from sstable_mutation_test into mutation_source_test
The idea is to reuse the same testing code on any mutation_source, for
example on memtable.

The range query test cases are now part of a generic mutation_source
test suite.
2015-07-22 13:14:33 +02:00
Tomasz Grabiec
33bcf9e8d3 tests: Make reader_assertions::produces() work on any range 2015-07-22 13:14:10 +02:00
Tomasz Grabiec
c8f3471055 sstable_mutation_tests: Add tests for inclusive/exclusive bounds with keys and tokens 2015-07-22 13:14:07 +02:00
Tomasz Grabiec
3de682ebeb tests: sstable_data_file_test: Fix use-after-free on reader 2015-07-22 13:10:00 +02:00
Avi Kivity
a547b881a7 Merge "Schema pull" from Pekka
"This series enables the schema pull functionality. It's used to
synchronize schema at node startup for schema changes that happened in
the cluster while the node was down.

Node 1:

  # Node 2 is not running.

  [penberg@nero apache-cassandra-2.1.7]$ ./bin/cqlsh --no-color 127.0.0.1
  Connected to Test Cluster at 127.0.0.1:9042.
  [cqlsh 5.0.1 | Cassandra 2.2.0 | CQL spec 3.2.0 | Native protocol v3]
  Use HELP for help.
  cqlsh> CREATE KEYSPACE keyspace3 WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
  cqlsh> SELECT * FROM system.schema_keyspaces;

   keyspace_name | durable_writes | strategy_class                             | strategy_options
  ---------------+----------------+--------------------------------------------+----------------------------
       keyspace3 |           True |                             SimpleStrategy | {"replication_factor":"1"}
          system |           True | org.apache.cassandra.locator.LocalStrategy |                         {}

  (2 rows)
  cqlsh> SELECT key, schema_version FROM system.local;

   key   | schema_version
  -------+--------------------------------------
   local | c3a18ddc-80c5-3a25-b82d-57178a318771

  (1 rows)

Node 2:

  # Node 2 is started.

  [penberg@nero apache-cassandra-2.1.7]$ ./bin/cqlsh --no-color 127.0.0.2
  Connected to Test Cluster at 127.0.0.2:9042.
  [cqlsh 5.0.1 | Cassandra 2.2.0 | CQL spec 3.2.0 | Native protocol v3]
  Use HELP for help.
  cqlsh> SELECT * FROM system.schema_keyspaces;

   keyspace_name | durable_writes | strategy_class                             | strategy_options
  ---------------+----------------+--------------------------------------------+----------------------------
       keyspace3 |           True |                             SimpleStrategy | {"replication_factor":"1"}
          system |           True | org.apache.cassandra.locator.LocalStrategy |                         {}

  (2 rows)
  cqlsh> SELECT key, schema_version FROM system.local;

   key   | schema_version
  -------+--------------------------------------
   local | c3a18ddc-80c5-3a25-b82d-57178a318771

  (1 rows)"
2015-07-22 13:32:47 +03:00
Pekka Enberg
d4d2e2fa0e service/storage_proxy: add get_storage_proxy() helpers
Make storage proxy a singleton and add helpers to look up a reference.
This makes it easier to convert code from Origin in areas such as
storage service.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-07-22 11:57:00 +03:00
Nadav Har'El
4edf7fe206 clean up uses of lw_shared_ptr<file>
recently, "file" started to use a shared_ptr internally, and is already
copy-able and reference counted, and there is no reason to use
lw_shared_ptr<file>. This patch cleans up a few remaining places where
lw_shared_ptr<file> was used.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-07-22 11:51:40 +03:00
Paweł Dziepak
e24aa67177 tests/cql3: add varint to test_types
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-21 14:47:17 +02:00
Paweł Dziepak
27c5bb6ada test/types: add tests for varint type
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-21 14:46:54 +02:00
Asias He
fa2aee57ac utils: Move util/serialization.hh to utils/serialization.hh
Now we will not have the ugly utils and util directories, only utils.
2015-07-21 16:12:54 +08:00
Asias He
d6df358f2f tests: Bring back tests/urchin/message.cc
Change to use the new messaging_service API.
2015-07-21 16:12:54 +08:00
Raphael S. Carvalho
729b975438 tests: add testcase to size-tiered strategy
Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
2015-07-20 12:27:41 -03:00
Avi Kivity
cc17c44640 Move seastar to a submodule
Instead of urchin being layered on top of seastar, move seastar to a
subdirectory (as a submodule) and use seastar.pc/libseastar.a to link
with it.
2015-07-19 20:48:36 +03:00
Avi Kivity
8712796e0f Merge seastar upstream
Add messaging_service thunk from new-style serialization (free functions)
to old-style serialization (serializer methods).
2015-07-19 14:18:35 +03:00
Avi Kivity
01e8cc8df2 rpc: switch user-defined serialization to free functions
By using free functions that take the serializer as a parameter (rather than
'this'), we can add serialization functions without changing the serializer
class.
2015-07-19 13:09:20 +03:00
Avi Kivity
0d68b4614d Merge seastar upstream
Rewrote messaging_service serialization for new non-deferring rpc
serialization.
2015-07-18 20:21:20 +03:00
Avi Kivity
3942546d41 rpc: switch to non-deferring serialization
rpc currently allows serializers and deserializers to defer, because
the input and output stream may not be ready.  They may not, however,
defer on behalf of the object being serialized or deserialized (i.e.
you cannot serialize to disk or deserialize from disk) because that
causes the tcp connection to block until serialization/deserialization is
complete.  So in practice messages must be small enough to fit in memory,
and there is nothing gained by the complexity.

To simplify things, switch to non-deferring serialization.  Add a frame
header to messages that specifies the buffer size, which allows rpc to
use a read_exacly() to consume the message, and thereafter deserialize it
immediately.

The result is significantly simpler, which should help with compile time.
2015-07-18 19:08:07 +03:00
Glauber Costa
2d1561d4d2 schema: remove set_id
Pass it through the builder. Existing caller is patched.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-17 20:29:21 -04:00
Glauber Costa
75ffcefd90 schema: remove set_compressor_params
use the builder instead. Sole current user is patched

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-17 20:29:21 -04:00
Tomasz Grabiec
db331efaa1 tests: Add test for exception propagation from make_lw_shared() 2015-07-17 16:31:43 +03:00
Glauber Costa
bfe7656cfc types_test: add test for collection parser
Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-16 09:47:00 -04:00
Avi Kivity
c74e36c30e Merge branch 'master' of github.com:cloudius-systems/urchin into db
Conflicts:
	message/messaging_service.cc
	message/messaging_service.hh
2015-07-16 12:51:19 +03:00
Avi Kivity
1d4805236b messaging_service: don't include config.hh in .hh
config.hh changes rapidly, so don't force lots of recompiles by including it.

Need to place seed_provider_type in namespace scope, so we can forward
declare it for that.
2015-07-16 12:26:02 +03:00
Asias He
14526e31b0 tests: Disable tests/urchin/message.cc for now
The interface of ms.send_message() will be gone shortly. We need to
write the tests using the new interface. Let's postpone it a bit.
2015-07-16 17:23:26 +08:00
Avi Kivity
6257ef1d83 Merge "Add mutation::live_row_count()" from Tomasz 2015-07-16 10:32:11 +03:00
Tomasz Grabiec
e065480341 tests: Add test for mutation::live_row_count() 2015-07-15 18:56:10 +02:00
Glauber Costa
04c0fbcb8c remove calls to seal_active_memtable
It should not be called directly: externall callers should be calling flush()
instead.

To be sure it doesn't happen again, make seal_active_memtable private.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-15 10:24:20 -04:00
Glauber Costa
ad46daa6aa column_family: add the commitlog as a parameter
When we create a column family, we can pass as an extra parameter, the
commitlog - or lack thereof. Because the commitlog is optional to begin with -
it won't exist if we don't call init_commitlog, we can have this to be empty
meaning no commit log.

The creation of a column family should be always done through
add_column_family. And if that is the case, we have the database's commitlog
right there and can get the pointer through the db. Only tests are not creating
the column family this way, and for them, it is fine.

We want to do that, because some column family operations will use the commit log.
Right now, they are forcing us to add parameters to APIs that would be much cleaner
without it. So while separation is good, this level of coupling is a net win as it
allows us to clean up some visible APIs.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
2015-07-15 10:24:20 -04:00
Tomasz Grabiec
c206699c9d Merge tag 'avi/logger-config/v1' from seastar-dev.git
Logger configuration from Avi.
2015-07-15 11:27:09 +02:00
Tomasz Grabiec
e1b4d0c29b Merge branch 'pdziepak/order-by-fixes/v2' from seastar-dev.git
"Fixes for ORDER BY clauses" from Pawel.

"The patches fix several issues in CQL3 frontend related to ORDER BY
clauses. Also, column component indexes are now handled properly and it
is possible to create tables with more than one column in clustering key."
2015-07-15 12:09:55 +03:00
Tomasz Grabiec
161744e8f9 tests: Add more tests for sstable range queries 2015-07-14 19:58:18 +02:00
Tomasz Grabiec
0bd4b77498 tests: Introduce reader_assertions::produces() which takes a vector 2015-07-14 19:58:18 +02:00
Tomasz Grabiec
19efb43354 tests: Add missing include to mutation_reader_assertions.hh 2015-07-14 19:58:18 +02:00
Tomasz Grabiec
6a5943267a tests: Extract tmpdir class from commitlog_test to tmpdir.hh
It will be useful in other tests too.
2015-07-14 19:58:18 +02:00
Tomasz Grabiec
0dc49434ad tests: Make tmpdir more generic 2015-07-14 19:58:17 +02:00
Tomasz Grabiec
5cab8bc759 tests: Deal with non-empty directory in ~tmpdir 2015-07-14 19:58:17 +02:00
Paweł Dziepak
56bcf40c5e tests/cql: add test cases for ORDER BY
Signed-off-by: Paweł Dziepak <pdziepak@cloudius-systems.com>
2015-07-14 19:34:28 +02:00
Avi Kivity
99a15de9e5 logger: de-thread_local-ize logger
The logger class constructor registers itself with the logger registry,
in order to enable dynamically setting log levels.  However, since
thread_local variables may be (and are) initialized at the time of first
use, when the program starts up no loggers are registered.

Fix by making loggers global, not thread_local.  This requires that the
registry use locking to prevent registration happening on different threads
from corrupting the registry.

Note that technically global variables can also be initialized at the
point of first use, and there is no portable way for classes to self-register.
However this is the best we can do.
2015-07-14 17:18:11 +03:00
Avi Kivity
0171dfbf81 tests: drop http server from messaging test
Not needed, and doesn't compile.
2015-07-13 13:20:56 +03:00
Avi Kivity
8c7bcf52e2 Merge seastar upstream 2015-07-12 17:06:14 +03:00
Avi Kivity
35f29dcdb4 fstream: add read-until-end tests without knowning the file size beforehand 2015-07-12 16:52:24 +03:00
Tomasz Grabiec
18c48dbb14 tests: Add test for inserting a row without setting any regular column 2015-07-12 15:04:38 +02:00
Tomasz Grabiec
28c1c3eaf1 tests: Use 'update' instead of 'insert' in test_ttl
We don't really handle expiration of entrie rows yet, due to issue #17.

Fixing a bug in 'insert' made this test start to fail because the
expired row started to appear in the results. Until #17 is fixed,
let's use 'update' to create the row, so that the expectations are
met.
2015-07-12 15:04:38 +02:00
Tomasz Grabiec
674dfdcf25 tests: Test consistent ordering of partitions in range queries
In Origin, partitions in range query results are ordered using
decorated_key ordering. This allows the use of token() function for
incremental iterating over results, as mentioned here:

http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0
2015-07-12 12:54:39 +02:00
Tomasz Grabiec
6f5c00c515 tests: Add test for mutation queries 2015-07-12 12:54:38 +02:00
Tomasz Grabiec
c084a86de6 tests: Add more tests for data queries 2015-07-09 19:55:01 +02:00