Skip to content

Commit

Permalink
feat: add append mode to table options (#3624)
Browse files Browse the repository at this point in the history
* feat: add append mode to table options

* test: add append mode test

* test: rename test tables

* chore: Add delete test for append mode
  • Loading branch information
evenyag authored Apr 8, 2024
1 parent 34b1427 commit 3e1a125
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/mito2/src/worker/handle_write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ fn check_op_type(append_mode: bool, request: &WriteRequest) -> Result<()> {
request.op_type == OpType::Put,
InvalidRequestSnafu {
region_id: request.region_id,
reason: "Only put is allowed under append mode",
reason: "DELETE is not allowed under append mode",
}
);
}
Expand Down
2 changes: 2 additions & 0 deletions src/store-api/src/mito_engine_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pub fn is_mito_engine_option_key(key: &str) -> bool {
"memtable.partition_tree.index_max_keys_per_shard",
"memtable.partition_tree.data_freeze_threshold",
"memtable.partition_tree.fork_dictionary_bytes",
"append_mode",
]
.contains(&key)
}
Expand Down Expand Up @@ -70,6 +71,7 @@ mod tests {
assert!(is_mito_engine_option_key(
"memtable.partition_tree.fork_dictionary_bytes"
));
assert!(is_mito_engine_option_key("append_mode"));
assert!(!is_mito_engine_option_key("foo"));
}
}
73 changes: 73 additions & 0 deletions tests/cases/standalone/common/insert/append_mode.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
create table if not exists append_mode_on(
host string,
ts timestamp,
cpu double,
TIME INDEX (ts),
PRIMARY KEY(host)
)
engine=mito
with('append_mode'='true');

Affected Rows: 0

INSERT INTO append_mode_on VALUES ('host1',0, 0), ('host2', 1, 1,);

Affected Rows: 2

INSERT INTO append_mode_on VALUES ('host1',0, 0), ('host2', 1, 1,);

Affected Rows: 2

SELECT * from append_mode_on ORDER BY host, ts;

+-------+-------------------------+-----+
| host | ts | cpu |
+-------+-------------------------+-----+
| host1 | 1970-01-01T00:00:00 | 0.0 |
| host1 | 1970-01-01T00:00:00 | 0.0 |
| host2 | 1970-01-01T00:00:00.001 | 1.0 |
| host2 | 1970-01-01T00:00:00.001 | 1.0 |
+-------+-------------------------+-----+

-- SQLNESS REPLACE (region\s\d+\(\d+\,\s\d+\)) region
DELETE FROM append_mode_on WHERE host = 'host1';

Error: 1004(InvalidArguments), Invalid request to region, reason: DELETE is not allowed under append mode

create table if not exists append_mode_off(
host string,
ts timestamp,
cpu double,
TIME INDEX (ts),
PRIMARY KEY(host)
)
engine=mito
with('append_mode'='false');

Affected Rows: 0

INSERT INTO append_mode_off VALUES ('host1',0, 0), ('host2', 1, 1,);

Affected Rows: 2

INSERT INTO append_mode_off VALUES ('host1',0, 10), ('host2', 1, 11,);

Affected Rows: 2

SELECT * from append_mode_off ORDER BY host, ts;

+-------+-------------------------+------+
| host | ts | cpu |
+-------+-------------------------+------+
| host1 | 1970-01-01T00:00:00 | 10.0 |
| host2 | 1970-01-01T00:00:00.001 | 11.0 |
+-------+-------------------------+------+

DROP TABLE append_mode_on;

Affected Rows: 0

DROP TABLE append_mode_off;

Affected Rows: 0

38 changes: 38 additions & 0 deletions tests/cases/standalone/common/insert/append_mode.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
create table if not exists append_mode_on(
host string,
ts timestamp,
cpu double,
TIME INDEX (ts),
PRIMARY KEY(host)
)
engine=mito
with('append_mode'='true');

INSERT INTO append_mode_on VALUES ('host1',0, 0), ('host2', 1, 1,);

INSERT INTO append_mode_on VALUES ('host1',0, 0), ('host2', 1, 1,);

SELECT * from append_mode_on ORDER BY host, ts;

-- SQLNESS REPLACE (region\s\d+\(\d+\,\s\d+\)) region
DELETE FROM append_mode_on WHERE host = 'host1';

create table if not exists append_mode_off(
host string,
ts timestamp,
cpu double,
TIME INDEX (ts),
PRIMARY KEY(host)
)
engine=mito
with('append_mode'='false');

INSERT INTO append_mode_off VALUES ('host1',0, 0), ('host2', 1, 1,);

INSERT INTO append_mode_off VALUES ('host1',0, 10), ('host2', 1, 11,);

SELECT * from append_mode_off ORDER BY host, ts;

DROP TABLE append_mode_on;

DROP TABLE append_mode_off;

0 comments on commit 3e1a125

Please sign in to comment.