| 1894 | } |
| 1895 | |
| 1896 | void TableImpl::ScheduleUpdateMeta(const std::string& row, int64_t meta_timestamp) { |
| 1897 | MutexLock lock(&meta_mutex_); |
| 1898 | TabletMetaNode* node = GetTabletMetaNodeForKey(row); |
| 1899 | if (node == NULL) { |
| 1900 | TabletMetaNode& new_node = tablet_meta_list_[row]; |
| 1901 | new_node.meta.mutable_key_range()->set_key_start(row); |
| 1902 | new_node.meta.mutable_key_range()->set_key_end(row + '\0'); |
| 1903 | new_node.status = WAIT_UPDATE; |
| 1904 | UpdateMetaAsync(); |
| 1905 | return; |
| 1906 | } |
| 1907 | if (node->status == NORMAL && meta_timestamp >= node->update_time) { |
| 1908 | int64_t update_interval = |
| 1909 | node->update_time + FLAGS_tera_sdk_update_meta_internal - get_micros() / 1000; |
| 1910 | if (update_interval <= 0) { |
| 1911 | node->status = WAIT_UPDATE; |
| 1912 | UpdateMetaAsync(); |
| 1913 | } else { |
| 1914 | node->status = DELAY_UPDATE; |
| 1915 | ThreadPool::Task delay_task = |
| 1916 | std::bind(&TableImpl::DelayUpdateMeta, this, node->meta.key_range().key_start(), |
| 1917 | node->meta.key_range().key_end()); |
| 1918 | thread_pool_->DelayTask(update_interval, delay_task); |
| 1919 | } |
| 1920 | } |
| 1921 | } |
| 1922 | |
| 1923 | bool TableImpl::UpdateTableMeta(ErrorCode* err) { |
| 1924 | MutexLock lock(&table_meta_mutex_); |
nothing calls this directly
no test coverage detected