1. Reduce the number of threads reading avro logs and keep the readers in a fixed thread pool.
2. Regularly cleaning the cached resolvers in the thread local map by reflection.
Sometimes, user may use a low version FE to read high version image, which may cause some undefined behavior
and hard to debug.
This PR throw an explicit error to notify the user
Sometimes, user need to add some custom libs to the cluster, such lzo.jar, orai18n.jar, etc.
In previous, these lib files are places in fe/lib or be/lib.
But when upgrading cluster, the lib dir will be replaced by new lib dir, so that all custom libs are lost.
In this PR, I add new dir custom_lib for FE and BE, and user can place custom lib files in it.
In some cloud native deployment scenario, BE(especially the Compute Node BE) will be add to cluster and remove from cluster very frequently. User's query will fail if there is a fragment is running on the shutting down BE. Users could use stop_be.sh --grace, then BE will wait all running queries to stop to avoiding running query failure, but if the waiting time exceed the limit, then be will exit directly. During this period, FE will not send any queries to BE and waiting for all running queries to stop
Create a jack user and set the password to expire after 10 days.
`CREATE USER 'jack' IDENTIFIED BY '12345' PASSWORD_EXPIRE INTERVAL 10 DAY FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY;`
After the password has expired, reset the password.
`SET PASSWORD FOR 'jack' = PASSWORD('123');`
Log in with a new password, ERROE ` Your password has expired. To log in you must change it using a client that supports expired passwords`
physicalPlan.resetLogicalProperties(); will not change the origin plan but create a new plan with no logical property. So should update the plan using resetLogicalProperties()'s return value.
```if (!new_top.is_null() && new_top != old_top)``` is always false since old_top is Null when init and Field == Null always return true.
We add old_top.is_null() check first to avoid the problem and then issue more carefull discussion about Field == Null semantics.
after eliminate outer join, create is-not-null predicate, and then this is-not-null predicate can be used to eliminate descendant outer join. the newly created is-not-null predicate will be eliminated in EliminateNotNull rule.
The `CreateRowPolicyCommand` is implemented with overriding `run()` method.
So when executing `create row policy` in non-master FE, and forward it to Master FE,
it will call `execute(TUniqueId queryId)` method and go through `executeByNereids()`.
And because without `run()` method, it will do nothing and return OK.
So after `show row policy`, user will get empty result.
This PR fix it by implmenting the `run()` method but throw an Exception, so that it will
fallback to old planner, to do the creating row policy command normally.
The full implement of `run()` method should be implemented later.
This is just a tmp fix.