Skip to content

Commit ce2a441

Browse files
committed
add test
1 parent 637509e commit ce2a441

File tree

2 files changed

+38
-21
lines changed

2 files changed

+38
-21
lines changed

src/meta/server_state.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3069,6 +3069,13 @@ void server_state::set_app_envs(const app_env_rpc &env_rpc)
30693069
zauto_write_lock l(_lock);
30703070
std::shared_ptr<app_state> app = get_app(app_name);
30713071

3072+
FAIL_POINT_INJECT_NOT_RETURN_F("set_app_envs_failed", [&app](std::string_view s) {
3073+
if (s == "dropped_after_update_remote_storage") {
3074+
app.reset();
3075+
return;
3076+
}
3077+
});
3078+
30723079
// The table might be removed just before the callback function is invoked, thus we must
30733080
// check if this table still exists.
30743081
//
@@ -3078,9 +3085,7 @@ void server_state::set_app_envs(const app_env_rpc &env_rpc)
30783085
// dropped state. Once it is applied by remote storage after another update dropping
30793086
// the table, the state of the table would always be non-dropped on remote storage.
30803087
if (!app) {
3081-
LOG_ERROR("set app envs failed since app(name={}, id={}) has just been dropped",
3082-
app_name,
3083-
app->app_id);
3088+
LOG_ERROR("set app envs failed since app({}) has just been dropped", app_name);
30843089
env_rpc.response().err = ERR_APP_DROPPED;
30853090
env_rpc.response().hint_message = "app has just been dropped";
30863091
return;

src/meta/test/server_state_test.cpp

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -212,24 +212,36 @@ class server_state_test
212212
void meta_service_test_app::app_envs_basic_test()
213213
{
214214
server_state_test test;
215-
test.load_apps({"test_app1", "test_set_app_envs_not_found"});
216-
217-
std::cout << "test server_state::set_app_envs(not_found)..." << std::endl;
218-
{
219-
configuration_update_app_env_request request;
220-
request.__set_app_name("test_set_app_envs_not_found");
221-
request.__set_op(app_env_operation::type::APP_ENV_OP_SET);
222-
request.__set_keys({replica_envs::ROCKSDB_WRITE_BUFFER_SIZE});
223-
request.__set_values({"67108864"});
224-
225-
fail::setup();
226-
fail::cfg("set_app_envs_failed", "void(not_found)");
227-
228-
auto rpc = test.set_app_envs(request);
229-
ASSERT_EQ(ERR_APP_NOT_EXIST, rpc.response().err);
230-
231-
fail::teardown();
232-
}
215+
test.load_apps({"test_app1",
216+
"test_set_app_envs_not_found",
217+
"test_set_app_envs_dropping",
218+
"test_set_app_envs_dropped_after_update_remote_storage"});
219+
220+
#define TEST_SET_APP_ENVS_FAILED(action, err_code) \
221+
std::cout << "test server_state::set_app_envs(" #action ")..." << std::endl; \
222+
do { \
223+
configuration_update_app_env_request request; \
224+
request.__set_app_name("test_set_app_envs_" #action); \
225+
request.__set_op(app_env_operation::type::APP_ENV_OP_SET); \
226+
request.__set_keys({replica_envs::ROCKSDB_WRITE_BUFFER_SIZE}); \
227+
request.__set_values({"67108864"}); \
228+
\
229+
fail::setup(); \
230+
fail::cfg("set_app_envs_failed", "void(" #action ")"); \
231+
\
232+
auto rpc = test.set_app_envs(request); \
233+
ASSERT_EQ(err_code, rpc.response().err); \
234+
\
235+
fail::teardown(); \
236+
} while (0)
237+
238+
TEST_SET_APP_ENVS_FAILED(not_found, ERR_APP_NOT_EXIST);
239+
240+
TEST_SET_APP_ENVS_FAILED(dropping, ERR_BUSY_DROPPING);
241+
242+
TEST_SET_APP_ENVS_FAILED(dropped_after_update_remote_storage, ERR_APP_DROPPED);
243+
244+
#undef TEST_SET_APP_ENVS_FAILED
233245

234246
std::cout << "test server_state::set_app_envs()..." << std::endl;
235247
{

0 commit comments

Comments
 (0)