From 8abdcc0de8b697c26fcdec45168c645ced0665bd Mon Sep 17 00:00:00 2001 From: Suraj Naik Date: Thu, 31 Oct 2019 10:11:22 +0530 Subject: [PATCH 1/2] MB-36662:CLI deployment should not set app config to default Change-Id: I0288d2b1a787ad52c70e817b5513dc412d110655 Reviewed-on: http://review.couchbase.org/117296 Reviewed-by: Jeelan Basha Poola Tested-by: Suraj Naik --- service_manager/http_handlers.go | 2 +- service_manager/utils.go | 83 +++++++++++++++++--------------- service_manager/validation.go | 6 +-- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/service_manager/http_handlers.go b/service_manager/http_handlers.go index 88a3b1fd..aa8d4ac8 100644 --- a/service_manager/http_handlers.go +++ b/service_manager/http_handlers.go @@ -1258,7 +1258,7 @@ func (m *ServiceMgr) setSettings(appName string, data []byte) (info *runtimeInfo return } - if info = m.validateSettings(settings); info.Code != m.statusCodes.ok.Code { + if info = m.validateSettings(appName, settings); info.Code != m.statusCodes.ok.Code { logging.Errorf("%s %s", logPrefix, info.Info) return } diff --git a/service_manager/utils.go b/service_manager/utils.go index b4022a9c..5763eb80 100644 --- a/service_manager/utils.go +++ b/service_manager/utils.go @@ -84,58 +84,65 @@ func encodeRev(rev uint64) service.Revision { return ext } -func fillMissingWithDefaults(settings map[string]interface{}) { +func (m *ServiceMgr) fillMissingWithDefaults(appName string, settings map[string]interface{}) { + // Fill from temp store if available + app, _ := m.getTempStore(appName) + // Handler related configurations - fillMissingDefault(settings, "checkpoint_interval", float64(60000)) - fillMissingDefault(settings, "cleanup_timers", false) - fillMissingDefault(settings, "cpp_worker_thread_count", float64(2)) - fillMissingDefault(settings, "deadline_timeout", float64(62)) - fillMissingDefault(settings, "execution_timeout", float64(60)) - fillMissingDefault(settings, "feedback_batch_size", float64(100)) - fillMissingDefault(settings, "feedback_read_buffer_size", float64(65536)) - fillMissingDefault(settings, "idle_checkpoint_interval", float64(30000)) - fillMissingDefault(settings, "lcb_inst_capacity", float64(5)) - fillMissingDefault(settings, "log_level", "INFO") - fillMissingDefault(settings, "poll_bucket_interval", float64(10)) - fillMissingDefault(settings, "sock_batch_size", float64(100)) - fillMissingDefault(settings, "tick_duration", float64(60000)) - fillMissingDefault(settings, "timer_context_size", float64(1024)) - fillMissingDefault(settings, "undeploy_routine_count", float64(6)) - fillMissingDefault(settings, "worker_count", float64(3)) - fillMissingDefault(settings, "worker_feedback_queue_cap", float64(500)) - fillMissingDefault(settings, "worker_queue_cap", float64(100*1000)) - fillMissingDefault(settings, "worker_queue_mem_cap", float64(1024)) - fillMissingDefault(settings, "worker_response_timeout", float64(3600)) + fillMissingDefault(app, settings, "checkpoint_interval", float64(60000)) + fillMissingDefault(app, settings, "cleanup_timers", false) + fillMissingDefault(app, settings, "cpp_worker_thread_count", float64(2)) + fillMissingDefault(app, settings, "deadline_timeout", float64(62)) + fillMissingDefault(app, settings, "execution_timeout", float64(60)) + fillMissingDefault(app, settings, "feedback_batch_size", float64(100)) + fillMissingDefault(app, settings, "feedback_read_buffer_size", float64(65536)) + fillMissingDefault(app, settings, "idle_checkpoint_interval", float64(30000)) + fillMissingDefault(app, settings, "lcb_inst_capacity", float64(5)) + fillMissingDefault(app, settings, "log_level", "INFO") + fillMissingDefault(app, settings, "poll_bucket_interval", float64(10)) + fillMissingDefault(app, settings, "sock_batch_size", float64(100)) + fillMissingDefault(app, settings, "tick_duration", float64(60000)) + fillMissingDefault(app, settings, "timer_context_size", float64(1024)) + fillMissingDefault(app, settings, "undeploy_routine_count", float64(6)) + fillMissingDefault(app, settings, "worker_count", float64(3)) + fillMissingDefault(app, settings, "worker_feedback_queue_cap", float64(500)) + fillMissingDefault(app, settings, "worker_queue_cap", float64(100*1000)) + fillMissingDefault(app, settings, "worker_queue_mem_cap", float64(1024)) + fillMissingDefault(app, settings, "worker_response_timeout", float64(3600)) // metastore related configuration - fillMissingDefault(settings, "execute_timer_routine_count", float64(3)) - fillMissingDefault(settings, "timer_storage_routine_count", float64(3)) - fillMissingDefault(settings, "timer_storage_chan_size", float64(10*1000)) - fillMissingDefault(settings, "timer_queue_mem_cap", float64(50)) - fillMissingDefault(settings, "timer_queue_size", float64(10000)) + fillMissingDefault(app, settings, "execute_timer_routine_count", float64(3)) + fillMissingDefault(app, settings, "timer_storage_routine_count", float64(3)) + fillMissingDefault(app, settings, "timer_storage_chan_size", float64(10*1000)) + fillMissingDefault(app, settings, "timer_queue_mem_cap", float64(50)) + fillMissingDefault(app, settings, "timer_queue_size", float64(10000)) // Process related configuration - fillMissingDefault(settings, "breakpad_on", true) + fillMissingDefault(app, settings, "breakpad_on", true) // Rebalance related configurations - fillMissingDefault(settings, "vb_ownership_giveup_routine_count", float64(3)) - fillMissingDefault(settings, "vb_ownership_takeover_routine_count", float64(3)) + fillMissingDefault(app, settings, "vb_ownership_giveup_routine_count", float64(3)) + fillMissingDefault(app, settings, "vb_ownership_takeover_routine_count", float64(3)) // Application logging related configurations - fillMissingDefault(settings, "app_log_max_size", float64(1024*1024*40)) - fillMissingDefault(settings, "app_log_max_files", float64(10)) - fillMissingDefault(settings, "enable_applog_rotation", true) + fillMissingDefault(app, settings, "app_log_max_size", float64(1024*1024*40)) + fillMissingDefault(app, settings, "app_log_max_files", float64(10)) + fillMissingDefault(app, settings, "enable_applog_rotation", true) // DCP connection related configurations - fillMissingDefault(settings, "agg_dcp_feed_mem_cap", float64(1024)) - fillMissingDefault(settings, "data_chan_size", float64(50)) - fillMissingDefault(settings, "dcp_gen_chan_size", float64(10000)) - fillMissingDefault(settings, "dcp_num_connections", float64(1)) + fillMissingDefault(app, settings, "agg_dcp_feed_mem_cap", float64(1024)) + fillMissingDefault(app, settings, "data_chan_size", float64(50)) + fillMissingDefault(app, settings, "dcp_gen_chan_size", float64(10000)) + fillMissingDefault(app, settings, "dcp_num_connections", float64(1)) } -func fillMissingDefault(settings map[string]interface{}, field string, defaultValue interface{}) { +func fillMissingDefault(app application, settings map[string]interface{}, field string, defaultValue interface{}) { if _, ok := settings[field]; !ok { - settings[field] = defaultValue + if _, tOk := app.Settings[field]; !tOk { + settings[field] = defaultValue + return + } + settings[field] = app.Settings[field] } } diff --git a/service_manager/validation.go b/service_manager/validation.go index b87c7551..fea22d49 100644 --- a/service_manager/validation.go +++ b/service_manager/validation.go @@ -51,7 +51,7 @@ func (m *ServiceMgr) validateApplication(app *application) (info *runtimeInfo) { return } - if info = m.validateSettings(util.DeepCopy(app.Settings)); info.Code != m.statusCodes.ok.Code { + if info = m.validateSettings(app.Name, util.DeepCopy(app.Settings)); info.Code != m.statusCodes.ok.Code { return } @@ -689,11 +689,11 @@ func (m *ServiceMgr) validatePossibleValues(field string, settings map[string]in return } -func (m *ServiceMgr) validateSettings(settings map[string]interface{}) (info *runtimeInfo) { +func (m *ServiceMgr) validateSettings(appName string, settings map[string]interface{}) (info *runtimeInfo) { info = &runtimeInfo{} info.Code = m.statusCodes.errInvalidConfig.Code - fillMissingWithDefaults(settings) + m.fillMissingWithDefaults(appName, settings) // Handler related configurations if info = m.validateStringMustExist("user_prefix", maxPrefixLength, settings); info.Code != m.statusCodes.ok.Code { From 123aaec7fc01deb8567fadd9ed90a4e4a4e16686 Mon Sep 17 00:00:00 2001 From: Jeelan Basha Poola Date: Wed, 6 Nov 2019 02:47:08 +0530 Subject: [PATCH 2/2] MB-36565: Fix for data mismatch during pause resume Check for stop_timer_scan_ first to prevent a possible shrinkspan without firing the timer. A following SyncSpan() will prevent the timer from firing again Change-Id: Ib35fd8de17dea856823557e7fdb99252cf5b6392 Reviewed-on: http://review.couchbase.org/117391 Reviewed-by: Tested-by: Jeelan Basha Poola --- v8_consumer/src/v8worker.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v8_consumer/src/v8worker.cc b/v8_consumer/src/v8worker.cc index 450a39c4..7de28a20 100644 --- a/v8_consumer/src/v8worker.cc +++ b/v8_consumer/src/v8worker.cc @@ -487,7 +487,7 @@ void V8Worker::RouteMessage() { case oScanTimer: { auto iter = timer_store_->GetIterator(); timer::TimerEvent evt; - while (iter.GetNext(evt) && !stop_timer_scan_.load()) { + while (!stop_timer_scan_.load() && iter.GetNext(evt)) { std::unique_lock lck(pause_lock_); ++timer_msg_counter; this->SendTimer(evt.callback, evt.context);