@@ -208,7 +208,7 @@ static void *purge_old_files_thread(void *arg);
208208static int lrllinecmp (char * lrlline , char * cmpto );
209209static void ttrap (struct timer_parm * parm );
210210int clear_temp_tables (void );
211-
211+ int gen_shard_deserialize_shard ( uint32_t * numdbs , char * * * dbnames , uint32_t * numcols , char * * * columns , char * * * shardnames , char * serializedStr );
212212pthread_key_t comdb2_open_key ;
213213
214214/*---GLOBAL SETTINGS---*/
@@ -2294,6 +2294,79 @@ int llmeta_load_views(struct dbenv *dbenv, void *tran)
22942294 return rc ;
22952295}
22962296
2297+ int llmeta_load_genshards (struct dbenv * dbenv , void * tran ) {
2298+ int rc = 0 ;
2299+ int bdberr = 0 ;
2300+ /* allow as many generic sharded tables as regular tables (?) */
2301+ char * tablenames [MAX_NUM_TABLES ];
2302+ char * shard_info = NULL ;
2303+ char * * dbnames = NULL , * * columns = NULL , * * shardnames = NULL ;
2304+ int table_count = 0 , size = 0 ;
2305+ uint32_t numdbs = 0 , numcols = 0 ;
2306+ struct dbtable * db = NULL ;
2307+ /* load the tables from the low level metatable */
2308+ if (bdb_get_genshard_names (tran , (char * * )tablenames , & table_count )) {
2309+ logmsg (
2310+ LOGMSG_ERROR ,
2311+ "couldn't load generic shard names from low level meta table (bdberr: %d)\n" ,
2312+ bdberr );
2313+ return 1 ;
2314+ }
2315+
2316+ for (int i = 0 ; i < table_count ; i ++ ) {
2317+ if (bdb_get_genshard (tran , tablenames [i ], & shard_info , & size , & bdberr )) {
2318+ logmsg (LOGMSG_ERROR ,
2319+ "couldn't load view definition from low level meta table "
2320+ "(bdberr: %d)\n" ,
2321+ bdberr );
2322+ goto err ;
2323+ }
2324+
2325+ if (gen_shard_deserialize_shard (& numdbs , & dbnames , & numcols , & columns , & shardnames , shard_info )) {
2326+ logmsg (LOGMSG_ERROR , "Failed to deserialize llmeta str for generic shard %s\n" , tablenames [i ]);
2327+ }
2328+
2329+ for (int i = 0 ;i < numdbs ;i ++ ){
2330+ db = get_dbtable_by_name (shardnames [i ]);
2331+ if (db ) {
2332+ /*update the table object*/
2333+ db -> numdbs = numdbs ;
2334+ db -> dbnames = dbnames ;
2335+ db -> numcols = numcols ;
2336+ db -> columns = columns ;
2337+ db -> shardnames = shardnames ;
2338+ } else {
2339+ logmsg (LOGMSG_ERROR , "FAILED TO UPDATE GENERIC SHARDING METADATA FOR TABLE %s\n" , tablenames [i ]);
2340+ }
2341+ }
2342+ }
2343+ return rc ;
2344+ err :
2345+ for (int i = 0 ; i < table_count ; i ++ ) {
2346+ free (tablenames [i ]);
2347+ }
2348+
2349+ if (dbnames ) {
2350+ for (int i = 0 ;i < numdbs ;i ++ ){
2351+ free (dbnames [i ]);
2352+ }
2353+ free (dbnames );
2354+ }
2355+
2356+ if (columns ) {
2357+ for (int i = 0 ;i < numcols ;i ++ ){
2358+ free (columns [i ]);
2359+ }
2360+ }
2361+
2362+ if (shardnames ) {
2363+ for (int i = 0 ;i < numdbs ;i ++ ) {
2364+ free (shardnames [i ]);
2365+ }
2366+ }
2367+ return rc ;
2368+ }
2369+
22972370static inline int db_get_alias (void * tran , dbtable * tbl )
22982371{
22992372 char * sqlalias = NULL ;
@@ -2412,12 +2485,12 @@ static int llmeta_load_tables(struct dbenv *dbenv, void *tran)
24122485 /* A shard of a partitioned table has the partition name as an alias.
24132486 * Read the sharded table metadata.
24142487 */
2415- if (tbl -> sqlaliasname ) {
2488+ /* if (tbl->sqlaliasname) {
24162489 rc = gen_shard_update_inmem_db(tran, tbl, tbl->sqlaliasname);
24172490 if (rc) {
24182491 logmsg(LOGMSG_USER, "NOT UPDATING SHARD METADATA FOR TABLE %s\n", tbl->tablename);
24192492 }
2420- }
2493+ }*/
24212494 /* We only want to load older schema versions for ODH databases. ODH
24222495 * information is stored in the meta table (not the llmeta table), so
24232496 * it's not loaded yet.
@@ -4225,6 +4298,13 @@ static int init(int argc, char **argv)
42254298 return -1 ;
42264299 }
42274300
4301+ if (llmeta_load_genshards (thedb , NULL )) {
4302+ logmsg (LOGMSG_FATAL , "could not load generic shards from the low level meta "
4303+ "table\n" );
4304+ unlock_schema_lk ();
4305+ return -1 ;
4306+ }
4307+
42284308 if (llmeta_load_timepart (thedb )) {
42294309 logmsg (LOGMSG_ERROR , "could not load time partitions\n" );
42304310 unlock_schema_lk ();
0 commit comments