rDSN
rDSN copied to clipboard
replication log commit failure
dassert(false, "cannot find handler for rpc code %d in %s", code, data_dir().c_str());
in replication_app_base::dispatch_rpc_call.
The root cause is that we store the rpc code as integers in logs. After code change, i.e., more task codes are introduced in this case, the same integer is not mapped to the same rpc string code anymore. Need to be fixed next.
the fix is still incomplete - the client may have different versions of code compared to the servers, in which case we need to have all task code transmitted as string instead of integers.
the above problem is now deal in another issue #180. close this issue now.
@qinzuoyan this case is a little bit different compared to error code. Currently for the case of replicated read/write, the task code is embedded as part of the msg body using intergers. There are two ways to fix: (1) change int to string in the msg body - which is a quick way to do; (2) change msg header rpc string to this task code string directly, and using context flags to identify this is a replicated read/write - this is going to be done in later refactoring of the whole 2nd layer. In both cases, the fixes will be different compared to the error code stuff. Consequently, I'm reopening the case.