41 : m_class_oid (class_oid)
42 , m_last_modified_lsa (lsa)
43 , m_class_name (class_name)
60 for (
auto &it : m_list)
62 if (it.m_class_name == classname &&
OID_EQ (&it.m_class_oid, &class_oid))
64 it.m_last_modified_lsa = lsa;
68 m_list.emplace_front (classname, class_oid, lsa);
74 for (
auto &it : m_list)
76 if (
OID_EQ (&class_oid, &it.m_class_oid))
87 const size_t DEFAULT_STRBUF_SIZE = 128;
91 for (list_type::const_iterator it = m_list.cbegin (); it != m_list.cend (); it++)
93 if (it != m_list.cbegin ())
97 strbuf (
"name=%s, oid=%d|%d|%d, lsa=%lld|%d", it->m_class_name.c_str (),
OID_AS_ARGS (&it->m_class_oid),
101 return strbuf.release_ptr ();
108 for (
const auto &it : m_list)
121 return m_list.empty ();
127 for (
auto &it : m_list)
129 assert (!it.m_last_modified_lsa.is_null ());
130 if (downto_lsa.
is_null () || it.m_last_modified_lsa > downto_lsa)
196 savept->
state = state;
229 std::strcpy (real_locator, entry->
top->
locator);
238 std::strcpy (real_locator, locator);
284 if (new_locator !=
NULL)
344 if (keyp - 1 <= metap)
349 size_t diff = (size_t) (keyp - metap - 1);
351 meta_name.append (metap, diff);
352 meta_name[
diff] =
'\0';
387 need_to_delete =
false;
393 need_to_delete =
true;
399 if (savept_lsa !=
NULL)
406 while (savept !=
NULL)
416 std::string meta_name;
425 savept = savept->
prev;
434 need_to_delete =
true;
441 #if defined (SERVER_MODE) 444 vacuum_notify_es_deleted (thread_p, entry->
top->
locator);
462 if (savept_lsa ==
NULL)
void tx_lob_locator_clear(cubthread::entry *thread_p, log_tdes *tdes, bool at_commit, LOG_LSA *savept_lsa)
struct lob_rb_root lob_locator_root
void add(const char *classname, const OID &class_oid, const LOG_LSA &lsa)
#define RB_NEXT(name, x, y)
static void lob_locator_put_meta(const char *locator, std::string &meta_name)
std::function< void(const tx_transient_class_entry &, bool &)> map_func_type
LOG_TDES * LOG_FIND_TDES(int tran_index)
#define LSA_AS_ARGS(lsa_ptr)
int xtx_add_lob_locator(cubthread::entry *thread_p, const char *locator, LOB_LOCATOR_STATE state)
const block_allocator PRIVATE_BLOCK_ALLOCATOR
#define OID_AS_ARGS(oidp)
bool LSA_LT(const log_lsa *plsa1, const log_lsa *plsa2)
tx_transient_class_entry()=default
bool has_class(const OID &class_oid) const
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
int xtx_drop_lob_locator(cubthread::entry *thread_p, const char *locator)
const char * get_classname() const
int es_rename_file(const char *in_uri, const char *metaname, char *out_uri)
#define OID_EQ(oidp1, oidp2)
bool lob_locator_is_valid(const char *locator)
RB_GENERATE_STATIC(lob_rb_root, lob_locator_entry, head, lob_locator_cmp)
int es_delete_file(const char *uri)
const char * lob_locator_key(const char *locator)
#define RB_FIND(name, x, y)
unsigned int mht_5strhash(const void *key, const unsigned int ht_size)
#define RB_REMOVE(name, x, y)
#define ER_LOG_UNKNOWN_TRANINDEX
static int lob_locator_cmp(const lob_locator_entry *e1, const lob_locator_entry *e2)
bool LSA_GE(const log_lsa *plsa1, const log_lsa *plsa2)
lob_savepoint_entry * prev
int heap_classrepr_decache(THREAD_ENTRY *thread_p, const OID *class_oid)
#define LOG_FIND_THREAD_TRAN_INDEX(thrd)
size_t strlcpy(char *dst, const char *src, size_t siz)
lob_savepoint_entry * top
#define RB_INSERT(name, x, y)
RB_PROTOTYPE_STATIC(lob_rb_root, lob_locator_entry, head, lob_locator_cmp)
char ES_URI[ES_MAX_URI_LEN]
enum lob_locator_state LOB_LOCATOR_STATE
void decache_heap_repr(const LOG_LSA &downto_lsa)
void map(const map_func_type &func) const
int xtx_change_state_of_locator(cubthread::entry *thread_p, const char *locator, const char *new_locator, LOB_LOCATOR_STATE state)
static void lob_locator_free(lob_locator_entry *&entry)
LOB_LOCATOR_STATE xtx_find_lob_locator(cubthread::entry *thread_p, const char *locator, char *real_locator)
const char * lob_locator_meta(const char *locator)